Как стать автором
Обновить
105
0
Рубанов Михаил @akaDuality

Head of Mobile at Dodo Engineering

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

Особенности подготовки текстов для правильного воспроизведения в программах для незрячих

Время на прочтение11 мин
Количество просмотров789

Я впервые столкнулся с разработкой для незрячих пользователей в 2008 году, когда принимал участие в разработке программного телефона для контакт-центров, в котором большое число агентов было незрячими. 

Когда один из моих коллег потерял зрение, у меня было 10 лет опыта с технологической точки зрения. По возвращении коллеги на работу моей задачей была подготовка для него отчетов о качестве звука в зависимости от используемых каналов связи, моделей телефонных аппаратов, версий программного обеспечения, вариантов используемых кодеков и массы прочих факторов.

Такую информацию логично было сводить в таблицы. Коллега слушал бы их, получая нужную информацию.

Но, как быстро выяснилось, информация в чистом виде очень плохо воспринимается на слух. Её нужно специально подготавливать, чтобы было кратко и информативно. И даже незначительные изменения в форматировании текста приводят к тому, что он полностью меняется при озвучании скрин-ридерами.

В результате итеративного анализа того, что плохо звучит, я идентифицировал причины, по которым что-то может так звучать, и выработал набор правил, как нужно оформлять тексты, чтобы их было удобно воспринимать на слух.

Набором этих правил я и хочу поделиться.

Читать далее
Всего голосов 15: ↑15 и ↓0+15
Комментарии9

От Style Transfer до диффузии: эволюция визуальных эффектов на смартфонах

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров2.2K


Четыре года я занимаюсь разработкой различных спецэффектов для фото и видео в мобильных приложениях. Вроде бы это локальная и как бы несерьезная тема, но одну только плачущую маску в Snapchat посмотрели 9 млрд раз. Такие штуки пользуются бешеной популярностью и здорово повышают виральность мобильных приложений, но с каждым годом удивлять людей становится все сложнее.


В этой статье я разберу эволюцию видеоэффектов, поделюсь наблюдениями и раскрою пару инсайдов о том, как перенести стилизацию изображения из StableDiffusion на смартфоны.

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

За гранью App Store, или Что нового открывает MDM и Supervised для B2B в iOS

Время на прочтение14 мин
Количество просмотров7.5K
Привет! Меня зовут Денис Кудинов, я iOS-Development team lead в «Лаборатории Касперского». В этой статье расскажу об Mobile Device Management, а также о supervised- и BYOD-режимах — как работает технология и что с ее помощью можно сделать такого, что недоступно обычным приложениям из App Store. Считайте это презентацией возможностей Configuration Profiles, да и Apple MDM в целом :)

image

Статья будет полезна разработчикам B2B-приложений для iOS, которые хотят разбавить свои инструменты новыми фичами, а также для product owner-ов и бэкенд-разработчиков, которые хотят поддержать взаимодействие с мобильными устройствами.
Читать дальше →
Всего голосов 11: ↑11 и ↓0+11
Комментарии3

Как встроить С-библиотеку в Swift-фреймворк

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


В 2014 году был представлен Swift, новый язык для разработки приложений экосистемы Apple. Новинка принесла не только новые возможности и функции, но и проблемы — тем, кто хотел пользоваться старыми добрыми C-библиотеками. В этой статье я рассмотрю одну из них — бандлинг C-библиотеки в Swift-фреймворк. Существует несколько способов её решения; в данном случае я объясню, как сделать это при помощи clang explicit-модулей.

Для примера мы возьмём внешнюю C-библиотеку libgif и встроим её в наш Swift-фреймворк GifSwift. Если вы хотите сразу увидеть результат, полностью проект можно посмотреть здесь.
Читать дальше →
Всего голосов 34: ↑34 и ↓0+34
Комментарии0

Делай нейминг как сеньор

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

Это объект Pizza, там хранится инфа о латте, а заказали его в Restaurant или в Pizzeria? Неудобно? Максимально. Мы читаем код существенно больше, чем пишем. И хочется сразу понимать, что происходит, не играя в квесты «что имел в виду автор», «да как это работает» и «я снова ничего не понял». Без навыка давать хороший нейминг невозможно писать качественный и поддерживаемый код. Про нейминг говорят заодно, в рамках архитектуры и общих инженерных практик. В статье поговорим про него отдельно.

Как получается, что код становится мало понятным даже для его авторов? Почему нейминг так важен? Как придумывать названия, не применяя целые теории нейминга? Как лёгким процессом организовать работу с неймингом в команде? На все эти вопросы мы ответим в статье.

Читать далее
Всего голосов 186: ↑184 и ↓2+182
Комментарии221

Почему я отказался от стандартной клавиатуры и никогда к ней не вернусь. Часть 1 (История клавиатуры)

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

Сколько не совершенствуй свои клавиатурные навыки, не достигнешь значительного прогресса, используя стандартную клавиатуру. Она давно устарела, но большинство готово с этим мириться. Чтобы понять почему она устарела, необходимо разобраться в её истории.

Читать далее
Всего голосов 172: ↑144 и ↓28+116
Комментарии644

Адаптируем Android приложение для незрячих людей. Часть 1: основы

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

В один из зимних вечеров я сидел дома, читал замечательную книжку «Android-программирование для профессионалов» и наткнулся на главу про Accessibility. Раньше я об этой теме не задумывался: клал null в поле contentDescription и жил себе спокойно. Но когда узнал, как слабовидящие люди пользуются смартфоном, у меня появилось желание погрузиться в тему доступности глубже.

Рассказываю, как адаптировать приложение для людей с ограниченными возможностями и так ли это трудозатратно, как кажется.

Читать далее
Всего голосов 7: ↑7 и ↓0+7
Комментарии6

Адаптируем Android-приложение для незрячих людей. Часть 2: Jetpack Compose

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

По данным ВОЗ, в мире более миллиарда человек обладает с той или иной формой инвалидности. Поэтому Accessibility, или доступность, — важная штука в разработке программного обеспечения, особенно под мобильные платформы.

Адаптировать View-интерфейс для людей с ограниченными возможностями не так трудоёмко, как кажется: об этом мы рассказывали в предыдущей статье.

Сегодня — про Accessibility в Jetpack Compose: в нём сделать доступный графический интерфейс приложения ещё легче, чем на View. Разбираемся, как устроена поддержка доступности в Compose и какие особенности учесть при разработке.

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

Демейк интерфейсов — Figma CS2

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

Как выгладил бы интерфейс Figma существуй она в 2006 году.

Всем привет! Я продуктовый дизайнер в одной небольшой компании и работаю там довольно давно. В последнее время я стал скучать по тем временам, когда я дизайнил что-то в свое удовольствие, просто веселья ради. И вот сидя однажды вечером, я подумал, а почему бы и нет? Сейчас запилю чего-нибудь этакое, честному народу на потеху, эге-гей! Ну и понеслось.

Читать далее
Всего голосов 23: ↑23 и ↓0+23
Комментарии8

Держите OKR подальше от моих GEMs

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

Работая над подходом к формированию целей и организации команды, я наткнулся на статью Кэтрин Китинг из Ad Hoc, описывающую формат постановки целей именуемый GEM (Goal -> Experiment -> Measure). Этот подход кажется мне интересным и доступным для внедрения, испытаю его на себе и после коррекций планируем попробовать внутри. Статья впервые публикуется в переводе на русский. Ссылка на оригинал ниже.

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

Яндекс выпускает DivKit — фреймворк для server-driven UI с открытым кодом

Время на прочтение12 мин
Количество просмотров49K
Привет! Сегодня Яндекс выкладывает в опенсорс DivKit — фреймворк для отрисовки интерфейсов из ответа сервера. Серверная вёрстка поможет ускорить разработку: наладить отправку апдейтов от сервера разным версиям приложения, создать прототип или просто написать интерфейс один раз для нескольких платформ.


Фреймворк включает в себя несколько библиотек: клиентскую часть по отрисовке интерфейсов для Android, iOS и веба, а также DSL для формирования ответа сервера на Kotlin, TypeScript и Python. Исходный код опубликован на Гитхабе под лицензией Apache 2.0.

Сейчас DivKit используется в приложении Яндекс, Алисе, Едадиле, Маркете, ТВ и других приложениях. В этом посте я постараюсь вспомнить историю фреймворка, затем мы напишем с его помощью небольшой просмотрщик ленты Хабра, а в конце я покажу ещё несколько простых примеров интеграции.
Читать дальше →
Всего голосов 124: ↑117 и ↓7+110
Комментарии49

Все, что нужно знать об iOS App Extensions

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


App Extensions появились в iOS 8 и сделали систему более гибкой, мощной и доступной для пользователей. Приложения могут отображаться в виде виджета в Центре Уведомлений, предлагать свои фильтры для фотографий в Photos, отображать новую системную клавиатуру и многое другое. При этом сохранилась безопасность пользовательских данных и системы. Об особенностях работы App Extensions и пойдёт речь ниже.
Читать дальше →
Всего голосов 24: ↑24 и ↓0+24
Комментарии4

Делись и больше не дерись: ограничения и сложности в разработке Share Extension

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

Привет! На связи iOS-разработчик KODE — Семён Медведев. Наша команда разрабатывает крутые цифровые продукты для государства и бизнеса, в том числе мобильные приложения.

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

В процессе я столкнулся со множеством нюансов, выяснение которых заняло у меня некоторое время. Я решил обобщить свой опыт в одном материале и рассказать об ограничениях и сложностях, с которыми могут столкнуться начинающие iOS-еры при разработке Share Extension.

Читать далее
Всего голосов 3: ↑2 и ↓1+1
Комментарии0

[boringssl] Failed to log metrics

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

Наверное, каждый iOS разработчик сталкивался с этой проблемой. Любое приложение, которое делает https запросы, получает в лог эти мистические сообщения от boringssl:

[boringssl] boringssl_metrics_log_metric_block_invoke(151) Failed to log metrics

Проблема неотключаемого мусорного логирования от boringssl мучала нас много лет, но, кажется, я нашёл приемлемое решение.

Читать далее
Всего голосов 16: ↑15 и ↓1+14
Комментарии13

Как мы учимся адаптировать Яндекс Go для незрячих пользователей: ожидания, суровая реальность, чек-лист разработчика

Время на прочтение11 мин
Количество просмотров10K
Может показаться, что работа над доступностью приложения для незрячих пользователей заключается лишь в том, чтобы подписать все элементы интерфейса для скринридера. Мы тоже так раньше думали. Реальность оказалась куда сложнее.

Девушка пользуется приложением Go

Привет! Меня зовут Николай Морев, я разрабатываю iOS-версию приложения Яндекс Go. Не буду скрывать: долгое время незрячим и слабовидящим пользователям было крайне сложно, а порой и невозможно пользоваться нашим приложением.

Первые попытки, которые мы предприняли, должны были решить проблему малой кровью. Этот подход оказался наивным, но он принёс нам опыт, которым я хочу поделиться с другими разработчиками в этом посте. Под катом расскажу, почему работа над доступностью — это прежде всего работа над UX, а уже во вторую очередь — над API. Покажу примеры, когда эвристики системного скринридера приносили больше вреда, чем пользы. Объясню, почему для работы над доступностью нам потребовалась помощь ещё и бэкендеров.

Приложению Яндекс Go ещё далеко до идеала, нерешённых проблем хватает. Но, надеюсь, накопленный нами опыт поможет другим.
Читать дальше →
Всего голосов 42: ↑42 и ↓0+42
Комментарии17

Кодогенерация DTO: зачем она нужна и как её настроить

Время на прочтение12 мин
Количество просмотров19K
Data Transfer Object — модель данных, которые мы передаём из одного слоя приложения в другой. В Яндекс Go мы активно используем DTO. Предположим, нужно отобразить в UI приложения для вызова такси экспериментальную кнопку с двумя свойствами — надписью на кнопке и ориентировочным временем ожидания такси. Тогда в сетевом слое надо написать примерно такую DTO-модель:

struct OrderButtonExperimentDTO: Decodable {
   let buttonTitle: String
   let estimationMinute: Int
}

Правильно написанная модель позволяет разрабатывать разные слои приложения независимо — но нужно следить за актуальностью самой модели на каждом слое. Например, если в коде выше ожидалось не estimationMinute, а estimationMinutes, то клиент не сможет декодировать полученные из сети данные и пользователь не увидит время ожидания. Такую ошибку легко совершить, в n-й раз перепечатывая названия переменных под каждый слой — а разработчики и правда должны рутинно это делать при любом изменении (или расширении) исходного формата данных. Ещё сложнее заметить ошибку на код-ревью.

Поэтому мы решили добавить механизм, который сам бы составлял и переписывал код моделей DTO в зависимости от исходного формата.
Читать дальше →
Всего голосов 24: ↑23 и ↓1+22
Комментарии6

Создаем Swift Package на основе C++ библиотеки

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

Данная статья поможет вам создать свой первый Swift Package. Мы воспользуемся популярной C++ библиотекой для линейной алгебры Eigen, чтобы продемонстрировать, как можно обращаться к ней из Swift. Для простоты, мы портируем только часть возможностей Eigen.

Читать далее
Всего голосов 11: ↑10 и ↓1+9
Комментарии2

Макросы в Vim — это просто

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

Макросы в Vim


Очень странно, с одной стророны тема довольно банальная, а с другой ни тут, ни на просторах интернета не видно хорошего понимания такой важной темы, которая может иногда сильно упростить задачу редактирования текста. К написанию меня подтолкнуло обсуждение макросов в Emacs в блоге Avdi Grimm'а, где в своё время никто не смог внятно объяснить, что в Vim есть то, чего ожидает автор поста от достойного текстового редактора. Исправим это, в первую очередь в себе, а потом пойдём и скажем этим из интернета, что они не правы.

Какие задачи редактирования текста помогут решить макросы? Например, такую: вот в этой самой строке, которую вы читаете, взять и все запятые поменять на 0. Можно вспомнить регулярные выражения, но не все их любят, и уж тем более не все помнят, как вставлять с их помощью перенос строки, а если вам нужно заменять какие-то символы, которые используются в регулярных выражениях как служебные, вы уже отвлеклись от своей основной задачи и вместо редактирования текста занимаетесь написанием регулярного выражения для поиска и замены, пробуя и ошибаясь.
Макросы позволят это сделать быстрее, с меньшим отвлечением на вспоминание и написание чего-либо. Запомнить как работают макросы очень легко, и это войдёт в ваш ежедневный аресенал наряду с прыжками по тексту.

В этом топике мы научимся использовать макросы с этой самой задачей.

Давайте сначала вспомним, как это сделать вручную.
f,r0
После чего можно нажимать последовательно ; для повторного поиска и . для повторения предыдущего действия. Но в какой-то момент это может стать не так просто, например, вам нужно добавить пару каких-то знаков между делом. Точка уже не сработает и нужно будет опять нажимать r0. Или этих запятых окажется довольно много, и щёлкать поочерёдно ; и . придётся довольно много раз. В этот момент что-то вам уже подсказывает, что такой механический труд можно автоматизировать.

Основы
Многократные повторения и рекурсивный вызов
Редактирование макросов
Вечные макросы
Всякое
Познать
Всего голосов 31: ↑30 и ↓1+29
Комментарии8

Клавиатура своими руками под свои руки

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

Для меня всё началось вот с этого топика о механических клавиатурах, желания научиться печатать быстрее (к своему стыду до недавних пор печатал двумя пальцами, несмотря на 25летний стаж программирования), и появившихся недавно неприятных ощущений в кистях после рабочего дня (да и вообще времени, проведённого за компьютером).
Провёл короткое исследование о том, что вообще есть из клавиатур для программистов и тех, кто много печатает, и написал вот этот обзорный топик. Купил себе Happy Hacking Lite (минималистичная клавиатура с мембранными переключателями), но печатать на ней оказалось ещё менее удобно, чем на ноутбучной, в основном из за ещё более компактного расположения клавиш.
Вскоре появился топик, в котором автор рассказывал о новоприобитённой им Truly Ergonomic, пожалуй, практически идеальной клавиатуры с моей точки зрения, но в комментариях автор же отметил, что спустя два месяца использования так и не смог совсем пересесть на неё, а положение рук совсем не так и удобно, как рекламируется.
Чуть позже появился топик о Kinesis Advantage, по отзыву автора к которой тоже не так легко привыкнуть, а цена так и просто пугает.
И я решил...
Всего голосов 297: ↑286 и ↓11+275
Комментарии142

DI в iOS: Complete guide

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

Всем привет, меня зовут Виталий, я iOS-разработчик в юните мессенджера в Тинькофф. Сегодня поговорим о том, что такое DI, зачем он нужен, рассмотрим известные библиотеки для DI и сравним их между собой. Поехали!

Читать далее
Всего голосов 29: ↑29 и ↓0+29
Комментарии7

Информация

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