Прежде чем перейти к формулировке вопроса, сразу скажу, что он относится больше к юзабилити, чем к архитектуре и дизайну софта. К последнем он, впрочем, тоже имеет некоторое касательство, но весьма поверхностное. Об этом позже. За неимением форума по юзабилити — пишу сюда. Соответственно, под "методами" вынесенными в заголовок топика поразумеваются скорее способы структурирования и организации представления информации так, чтобы это было удобно пользователю. Теперь, собственно, формулировка:
КАК ?
Проще всего, наверное, пояснить на примере. Чтобы далеко за ним не ходить, возьмем тот же RSDN@Home. Сейчас у меня в форуме по c++ 7000+ сообщений, и это еще мало (примерно три месяца). Найти там нужный топик с первого раза — фиг. Да, я знаю про поиск. Проблема в том, что те критерии, которые удается сформулировать достаточно четко, чтобы скормить поисковому движку дают слишком большую выборку. Остальное — ручками и глазками. От той же проблемы страдает mozilla с двумя десятками ньюсгрупп с многолетней историей в каждой. Та же мозилла на время выполнения поиска фактически блокирует все остальные действия. Это уже "динамическая" проблема — потенцально долгий запрос блокирует систему и заставляет юзера ждать пока она не освободится.
Еще один аспект проблемы — ввод данных. Под вводом подразумевается достаточно узкий смысл, а именно — задача выделения некоторого подмножества из ответа для дальнейшей обработки. Заставить юзера прокликать мышкой тысячу чекбоксов — в конечном итоге получится только

. Сюда же относятся и всяческие sliders & scrollbars, которые требуется
точно спозиционировать в диапазоне 1.0 — 10000.0. И, хотя в некоторых случаях еще можно организовать ввод числовых данных, это не всегда удается. Жизненный пример — регулировка громкости. Импеданс моих наушников и звуковой платы так "удачно" согласуются, что юзабельных делений всего два: тихо и громко (в самом низу шкалы). От остального закладывает уши. Здесь выходом могла бы быть логарифмическая шкала. Мышиная акселерация — примерно из той же области.
Теперь, собственно, как с этим бороться. Все это достаточно разрозненные мысли, поэтому изложение немного сумбурно.
Ну, во-первых, при большом объеме выборки можно применить кластеризацию данных. То есть, близкие по какому либо критерию данные представляются как одна смысловая единица. В том же rsdn@home можно было бы сворачивать ветки недельной, месячной итд давности в одну строчку. Во-вторых, выборку можно делить на обозримые элементы (пример: каталог веб-магазина с кнопкой "показать модели только этого производителя", "показать с характеристикой не хуже чем.."). Из той же серии — сворачивание кода в visual studio. Сюда же можно отнести выделение наиболее "интересных" результатов, типа скоринга в gnus. Тоже в тему — быстрый доступ к элементам выборки, наподобие find-as-you-type в Lingvo и firefox, но это применимо не везде.
Выделение данных. Здесь в общем-то способ один, только с различными вариациями — запомнить сделанный один раз выбор и позволить им воспользоваться в дальнейшем. Это и "временные панели" в файловых менеджерах, позволяющие долго и методично выбирать нужные файлы, а потом одним махом сделать над ними какую-либо операцию, и 3dsmax, запоминающий множество выбранных примитивов. Ну или группировка юнитов в warcraft. В общем, подход типа "shopping cart".
Теперь с динамикой. Подход в общем-то один — пакетная обработка. Например, virtual dub позволяет отложить задание и выполнить все накопившееся сразу пачкой. Drweb выдает список найденных вирусов в конце работы, делая ненужным присутствие оператора за клавиатурой. В corel photo-paint в свое время была чудная фишка (сейчас убрали вроде) — он позволял загрузить уменьшенную копию изображения, затем записывал все действия, а потом воспроизводил их на полноформатной копии.
Короче говоря, существует ли какой-либо труд, систематизирующий все вышеизложенное ? Беда в том, что по отдельности все эти методики применяются, но
системного подхода к конструированию интерфейса
ориентированного на большие массивы я пока не видел.
Что посоветует общественность ?
... << RSDN@Home 1.1.3 stable >>