[#MetroLynch] IT Happens
Жертвой очередного метро-линча стало приложение IT Happens от Дмитрия Адодина – неофициальный клиент для сайта https://ithappens.ru/
Навигация и управление
Листание историй
Для вывода историй используется сводная страница (pivot), однако, возможность перехода между вкладками нарушена, так как возможность масштабирования и перемещения текста перекрывает схожие жесты для pivot.
Общая рекомендация — не использовать в pivot и panorama контролов, перекрывающие необходимые для их функционирования жесты.
Исправление: либо убрать возможность масштабирования текста, либо пересмотреть использование pivot. Важно учесть, что сама по себе возможность увеличения размера текста — это, безусловно, средство, повышающее доступность приложения для людей со слабым зрением.
Возможные варианты (но не факт, что это единственные подходящие решения):
Отдельные страницы для историй с поддержкой масштабирования (при этом теряется возможность быстрого перехода к следующей/предыдущей истории);
Масштабирование + кнопки для листания, как это сделано в Outlook (почте):
Статичный размер текста + установка размера шрифта в настройках/интерфейсе
Голосование и добавление в избранное
Приложение предоставляет два механизма «одобрения» историй: добавление в «любимое» и голосование за историю. Чтобы добавить историю в «любимые», нужно нажать звездочку, которая меняет свое состояние (можно также удалить). Чтобы проголосовать, нужно нажать сердечко.
Однако вот какая незадача: звездочки — это традиционный символ «избранного» (например, для последующего прочтения), а сердечки — это то, что нравится. И это не всегда одно и то же.
Рекомендация: переименовать «любимые» в «избранное» (избранные), либо заменить зведочки на сердечки, а сердечко на что-нибудь еще (см. ниже):
Также было бы неплохо добавить возможность удаления историй из «любимого» непосредственно в списке через контекстное меню.
Помимо этого, насколько я понимаю, голосование — это нелокальное действие, отсылающее голос на сервер. Для этого нужна более понятная метафора, особенно в контексте описанного выше. И вместе с этим нужно разрешить голосовать только один раз.
Рекомендация: сделать явным, что это именно жест одобрения, вместе с этим переводя кнопку в отключенное состояние после голосования (отозвать свой голос все равно нельзя).
Ссылки в тексте
Иногда в тексте историй встречаются ссылки (на другие истории?), которые открывают новые страницы, в которых отображается только адрес.
Исправление: отключать такие ссылки, преобразуя текст истории, либо открывать правильные страницы при переходе по ссылкам.
Дизайн
Экран заставки и шрифты с засечками
На экране заставки используется шрифт с засечками для подписи “unofficial app”:
В приложениях для Windows Phone лучше использовать шрифты без засечек, если для обратного нет обоснованной необходимости (например, в логотипе или если это является частью традиционного стиля подачи информации, унаследованного, скажем, из газеты – см. The New Your Times).
Рекомендация: заменить шрифт подписи на шрифт без засечек.
Заодно можно поправить отступы слева и справа, сделав их равными 24px. Над размещением логотипа и подписи надо отдельно подумать, рассмотрев разные варианты.
Логотип в панораме
Главная страница приложения сделана с помощью панорамы, в головок которой вынесен логотип соответствующего сайта, однако, качество используемого изображения оставляет желать лучшего:
Исправление: перевести логотип в кривые, либо использовать картинку лучшего качества.
Настройки
Настройки приложения содержат зависимые параметры, что отображено в виде иерархии:
(см. также раздел «Настройки» в части «Функциональность» ниже)
В Windows Phone рекомендуется выстраивать все элементы в вертикальную иерархию, избегая горизонтальных сдвигов без явной необходимости.
Исправление: убрать стрелку «связи» параметров и выровнять их по одной линии влево, заменить подписи на более понятные и дружелюбные (я бы также предпочел в данном случае переключатели):
Списки историй
Списки с историями («последние» и «любимые») выглядят слишком разреженно. Тут есть три важных момента:
- В Windows Phone не рекомендуется переносить заголовки на новую строчку.
- По умолчанию для расположения строк текста (LineStackingStrategy) используется стратегия MaxHeight, что плохо при большом размере текста приводит к слишком большому расстоянию между строчками.
- Расположение атрибутов истории (номер, название и дата) не сбалансированы — они должны быть выстроены в иерархию, в которой важное и большое будет наверху, а второстепенное и маленькое — ниже или сбоку.
Насколько я понимаю, главным в контексте приложения является все же заголовок.
Исправление: первым делом нужно поменять порядок следования атрибутов истории для восстановления правильной иерархии. Далее, поменяв LineStackingStrategy с MaxHeight, на BlockLineHeight и выставив подходящую высоту строки LineHeight, сделать заголовок, разбивающийся на несколько строк более компактным.
Далее надо понять, что один и тот же линейный порядок историй во времени поддерживают сразу три механизма: порядок в списке, номер истории и дата. Это представляется излишним, поэтому надо безжалостно выкидывать лишние детали, например, можно начать со времени при указании даты публикации, которые часто для подряд идущих историй повторяются.
К тому же, время указывается в неправильной локали. Для русскоязычных пользователей нужно писать не 2/18/2012 11:00:01 AM, а, например, 02.18.2012 11:00:01.
Исправление: выкидываем время, делаем правильный формат для дат. Учитывая скорость пополнения потока историй и ограниченность количества историй (50, если я не ошибаюсь), можно вообще ограничиться числом и месяцем:
(Я также заменил шрифт на Segoe WP SemiLight.)
Все / непрочитанное / любимое
Имея общий сплошной поток историй, трудно отделить, что я еще не читал, а что уже просмотрел.
Рекомендация: сделать опрос пользователей, чтобы понять характер прочтения историй. Читают ли все подряд? Нужно ли явно отделять то, что новое, от того, что уже прочитано?
Не факт, что это нужно делать, но исследовать такую опцию все же стоит.
Экран истории
Отдельные истории отображаются с помощью Pivot-контрола, в котором визуально в заголовки внутренних страниц вынесены номера историй. Учитывая длину заголовков и размещение в pivot (это уже обсуждалось выше), это представляется разумным решением:
Однако знак двоеточия здесь явно лишний.
Исправление: убрать двоеточие
Другой интересный момент заключается в том, что на самом деле в заголовок pivot-вкладки вынесен не только номер истории, но и ее название, поэтому в случае длинных названий получаются большие пробелы между двумя заголовками:
Исправление: перенести заголовок внутрь контентной части pivot-вкладки:
(При этом заголовок следующей истории, очевидно, не будет виден, но это как раз не страшно, так как навряд ли это критично в текущем контексте.)
Касательно размещения заголовка и его визуального прилипания к тексту, либо к номеру истории — надо рассмотреть разные варинты. Вот, к примеру, несколько:
И выбрать наиболее подходящий...
Функциональность
Корректное поведение при отсутствии связи
Хотя при входе в приложение, выдается соответствующее предупреждение, далее в ходе работы наличие связи не отслеживается. К примеру, исключение, возникающее при попытке проголосовать за приложение, не обрабатывается, что приводит к выходу из приложения.
Исправление: вставить обработку подобных исключений. Дополнительно было бы полезным отключать соответствующий функционал, например, переводить его в disabled-состояние.
Локализация приложения
Учитывая, что весь контент приложения на русском, странно, что часть элементов интерфейса сделана на английском. Например, раздел настроек называется “settings”, а внутри все настраиваемые параметры названы на русском.
Исправление: сделать интерфейс приложения полностью на русском, начиная со стартового экрана и заканчивая настройками.
Настройки
В настройках приложения указана зависимость между кешированием и обновлением данных в фоне (фоновая задача при выключенном приложении). На самом деле, они хотя и связаны некоторой логикой, она не прямая.
Например, если что-то загружать в фоне, все равно придется что-то где-то сохранять. А кеширование может быть постоянным или временным, сохранять записи можно и при ручном обнвлении. В дополнение формулировка «проверять обновления в фоне» звучит как «обновлять автоматически», хотя в контексте приложения это не совсем одно и то же.
Также надо отметить, что эти функции решают противеречивые задачи, поэтому связывать их неправильно:
- Кеширование нужно, прежде всего, для последующего прочтения offline и единоразовой загрузки историй (экономия трафика);
- Автоматическо обновление нужно, чтобы всегда видеть свежие истории без необходимости ручного обновления, но это же делает расход трафика неконтролируемым.
Рекомендация: если эти опции связаны не только интерфейсно, но и в логике работы приложения, эту зависимость стоит развязать.
Как следствие, в интерфейсе настроек должна пропасть зависимость между двумя параметрами. А настройку кеширования я бы вообще убрал, предполагая, что то, что загружено один раз, будет доступно и далее — в разумных пределах. Вместо этого можно предложить настраивать, сколько историй хранить (20-50-100).
===
Это был седьмой #metrolynch. Если вы хотите, чтобы ваше приложение также было подвергнуто публичному разбору, правила игры описаны тут.
p.s. Все мои оценки и рекомендации субъективны и не являются 100% верными решениями – все нужно тестировать и проверять на живых пользователях :)