r84 - 17 Jun 2016 - 23:08:10 - Sergej ZnamenskijYou are here: TWiki >  IS4UGP Web > ИдеиЯдра > ToDo

Что значит ToDo? Происходит оно от стандартных английских оборотов речи

  1. You have(must) to do ...

  1. You may(can) to do ...,

которые несут существенно различный смысл. В первом случае это задание, которое следует выполнить в указанный срок (жесткое ToDo), а во втором — информация об (ограниченной во времени?) возможности некоторых действий (мягкое ToDo).

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

Интерфейсы пользователя

Пользователь видит ToDo на экране и извещается о нём по электронной почте.

Визуализация ToDo и веб-интерфейс

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

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

Интерфейс вместо открыть/закрыть использует интеллектуальный способ показать/спрятать узлы, показывающий наиболее интересную (приоритетную) часть дерева, близкую к текущему узлу. Во избежание ложных ассоциаций с привычным интерфейсом (открытия/закрытия папок) иконки открытых папок использоваться не должны.

Текущим называем последний выбранный пользователем узел, информация которого представлена справа от дерева дел..

Сервер проверяет наличие ToDo и формирует для передачи браузеру приоритет каждого доступного узла по следующей шкале:

  • Узел неинтересен (приоритетность 0), корень ветки с только такими узлами всегда показывается лишь среди детей интересного текущего узла.
  • Узел интересен (приоритетность 1 при отсутствии ToDo),
  • Узел содержит ToDo (приоритетность p >1 узла -- это наибольшая из приоритетностей присутствующих в нём ToDo)

Каждый узел является корнем ветки (возможно пустой или частично спрятанной), поэтому далее узел представляет связную часть ветки, корнем которой он является, оставшуюся после удаления показанных узлов. Назовём эту часть областью узла и линейно упорядочим как рисуется на экране (вниз от корня).

Обрабатывая щелчок по узлу, сервер сбрасывает todo_info либо todo_done либо приоритетность если что-то из них присутствовало в узле и отображалось пользователю. Если после этого в области узла остались узлы с ToDo, то текущим делается узел с важнейшим из дел в области (верхний с максимальным значением приоритетности p >1 если их несколько). Если дел не осталось, то текущим делается узел с важнейшим из дел в ветке (также верхний с максимальным значением приоритетности p >1 если их несколько). Если ToDo нет не только в области, но и в ветке, то текущим делается узел с важнейшим из дел в системе (верхний с максимальным значением приоритетности p >1 если их несколько)

Чтобы размеры иконок могли свободно варьироваться, любая ветка визуализируется как таблица:

Иконка (к ней заголовок узла
короткий хвостик
3 пикселя слева
вверху)
      черта      все детские ветки кроме последней      
шири-
ной
3 пик-
селя
     уго- Последняя детская ветка
лок
 
Просвет шириной три пикселя

Если последняя ветка пустая, то уголок скрывается.

Черта, уголок и нарисованные на иконках хвостики неяркие, черта и уголок слева цвета верхней иконки, справа серые, хвостик слева серый, от размера иконки не зависят(?).

Размеры фиксированы только для черты и уголка.

Приоритетности ToDo и классы иконок

Вид иконки узла определяется интересностью представленной в ней информации.
  1. Ветки без ToDo могут показываться закрытой папкой или коробкой.
  2. todo_done, иконка (зеленое вроде choice-yes наизнанку или v) подсвечивается сообщением об успешном завершении важной обработки, к подробности которой возможно ещё понадобятся.
  3. todo_info, иконка (что-то вроде bubble) подсвечивается сообщением из этого ключа.
  4. todo_call, иконка (розовый или оранжевый фонарик led-purple или с ) подсвечивается сообщением о срочной и важной информации из этого ключа.
  5. todo_task, то иконка (розовый или оранжевый восклицательный знак ALERT! наизнанку !) подсвечивается сообщением о важном несделанном деле из этого ключа.
  6. todo_error, то иконка (ярко красный крест вроде choice-no наизнанку или x ) подсвечивается сообщением об ошибке из этого ключа.

Здесь 1-3 мягкие, а 4-6 жёсткие, причём 6 должно бросаться в глаза.

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

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

Поэтому текущий узел всегда интересен и должен выделяться повышенной видимостью (размером и/или яркостью) среди других интересных узлов, а неинтересный узел должен отличаться от них пониженной видимостью. Для плавного изменения видимости градации видимости для узлов без дел и две более видимых для узлов с делами:

Приоритетность Вариант иконки в зависимости от положения
Текущая (a) Соседняя с текущей (b) Из пути в дереве между корневой и текущей (c) Прочая (d) Бледная исчезающая или появляющаяся (e)
0 - 4 3 2 1
1 6 5 4 3 1
2-3 7 6 5 4 2
4-5 8 7 6 5 3
6 9 8 7 6 4

Каждая иконка ToDo должна существовать в 5 вариантах, а для узла без ToDo (приоритетность 0 или 1) в шести вариантах:

Цифры в табличке задают размер иконки:

Цифра в табличке 1 2 3 4 5 6 7 8
Размер иконки в пикселях 8 10 12 14 16 19 22 27

Состояние узла "1" (интересный) фиксируется на сервере в данных пользователя в хеше состояний дерева. Если пользователь кликнул по текущему узлу, оставшемуся без ToDo, то отметка интересности на сервере снимается. Отсутствие ключа (или непустого значения) интерпретируется как неинтересное состояние.

Оставлять узел без пометок ToDo текущим после того, как щелчок по нему сделал его неинтересным бессмысленно. Поэтому при отсутствии дела в текущем интересном узле щелчок по нему как правило должен сделать текущим ближайший узел с важнейшим из дел, а бывший текущим узел лишить признака интересности (если есть такое дело). Если пользователь щёлкал не по текущему узлу, значит интерес к ней остался. Правильную интерпретацию щелчка по текущему узлу должен осуществлять обрабатывающий его сервер.

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

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

Алгоритм расчёта визуализации

Расчёт визуализации происходит в браузере на основе следующих полученных от сервера данных:
  • идентификатор текущего узла С;
  • статистика каждой доступного пользователю узла, состоящая из общего количество ToDo в ветке узла, максимального приоритета в ней и отдельно в самом узле;
  • хеш списков доступных интерфейсов администрирования узлов (в частности, интерфейс системного административания узла - это дополнительный инструмент, пристраивающийся под видом дополнительного последнего ребёнка)
  1. Сначала определяется минимально возможное количество показываемых узлов: обязательно ярко показываются текущий узел. Его родитель, дети и инструменты непременно показываются все без исключения. Если узлов много (например, более 80), то список сформирован, иначе
  2. Если в списке немного (например, менее 20) узлов и общее количество ToDo невелико, то в список добавляются все узлы с ToDo и все корни таких веток, в которых ToDo больше чем в любой их подветке. Иначе добавляются только те из них, ветки которых содержат текущий узел.
  3. Если и теперь в списке мало узлов, то добавляются остальные предки текущего узла.
  4. Если и этого мало, то для всех интересных узлов списка добавляются их интересные дети, и это, возможно, делается неоднократно.
  5. Теперь формирование списка завершено и каждый узел помечается количеством ToDo в его ветке, не вошедших в подветки других показанных узлов.
  6. Определяются размеры иконок показываемых узлов.

Алгоритм перерисовки дерева

Перерисовка дерева должна происходить плавно в течение примерно половины секунды:
  1. Уменьшается на размер иконка старого текущего узла и увеличивается на размер иконка нового текущего узла.
  2. Расчитывается новая визуализация (см. выше) и делается выдержка 100 мс чтобы кадр мог быть воспринят.
  3. На размер изменяются ближайшие к старому и новому текущему узлам и делается пауза 150 мс.
  4. На размер изменяются все иконки, требующие изменения и делается выдержка 150 мс.
  5. Предыдущий пункт при необходимости повторяется (не более двух раз).

Почтовый интерфейс ToDo

Пользователь извещается о появлении ToDo c высоким приоритетом если он его не отметил как увиденное в течение нескольких минут. Время ожидания (5-30мин.) перед отправкой сообщения может зависеть от приоритетности и других факторов.

-- Sergej Znamenskij - 14 Mar 2013

 

Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r84 < r83 < r82 < r81 < r80 | More topic actions
 
Powered by TWiki

This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback