Не могу придумать интерфейс для реалтаймовой таблицы.
Единственный известный мне пример: Wireshark.
Таблица может принимать новые строки с частотой до 20 строк в секунду.
Можно выбрать строку, раскрыть и увидеть в ней подтаблицу, которая в свою очередь тоже может быстро меняться.
Есть специалисты по UI? Как реализовываете подобное в вашем софте?
Если вы параноик — это еще не значит, что за вами никто не следит
Здравствуйте, c3p0, Вы писали:
C>Не могу придумать интерфейс для реалтаймовой таблицы. C>Таблица может принимать новые строки с частотой до 20 строк в секунду.
видимо надо смотреть в сторону т.н. "Virtual table". В качестве примера тот же ListView
Если в двух словах, то в контроле задается фиксированное число строк, в которое отображается "окно" из длинного списка элементов. Реализовать можно хоть на голом WinGDI.
C>Можно выбрать строку, раскрыть и увидеть в ней подтаблицу, которая в свою очередь тоже может быстро меняться.
При помощи стандартного виндового ListView контрола такое можно состряпать.
htmlayout можно применить.
C>Есть специалисты по UI? Как реализовываете подобное в вашем софте?
Не очень понятно, что именно ты хочешь. Показывать много строк? Или запилить гибрид дерева и таблицы? Или тебе именно дизайн нужен?
_____________________
С уважением,
Stanislav V. Zudin
Здравствуйте, c3p0, Вы писали:
C>Не могу придумать интерфейс для реалтаймовой таблицы.
C>Таблица может принимать новые строки с частотой до 20 строк в секунду.
Таблица быстро заполняется (Virtual List-View) или имеет ограниченную длинну и быстро обновляется? C>Можно выбрать строку, раскрыть и увидеть в ней подтаблицу, которая в свою очередь тоже может быстро меняться.
А что вы хотите получить в итоге. Вы хотите увидеть значение на конкретный момент времени или видить как оно меняется или посмотреть историю изменений?
Если оно меняется очень быстро (20Hz) то имеет смысл замедлить некоторые варианты отображения типа transition 2s что бы пользователь мог успеть среагировать
на изменения (например ProcessHacker при закрытии процесса строка исчезает не сразу)
ps: Сразу представил вот такое табло только мелькающее со скоростью 20 раз в секунду
или даже с датчиком движения, что бы при приближении к табло мелькало быстрее.
Действительно, не понятно, что вы хотите.
Вас беспокоит сможет ли таблица принимать столь большое количество строк? В этом случае, как пример DbgView. Он принимает без проблем тысячи, может десятки тысяч строк.
Время от времени можно делать очистку строк, если они не нужны для лога в таком количестве или остановить скроллинг, это дает рассмотреть лог и менее нагружать систему.
Хороший пример: Таблица системных процессов и тредов(threads).
Например в линуксе программа top показывает процессы, а если нажать Shift+H, показывает треды.
Т.е. цель — таблица системных процессов, которые могут создаваться и уничтожаться в системе с частотой 10-20 Hz
При выборе одной из строк таблицы, справа отрисовывается таблица тредов, в которой, в свою очередь треды могут добавляться удаляться с той же частотой.
Не понятно как сторить навигацию по таким таблицам.
Например, выделил строку чтобы с ней поработать, а она убежала вниз, т.к. данные постоянно набиваются.
Или другой кейс — например надо выделить несколько процессов и сделать им terminate.
Пример таблиц:
Processes
--
id
name
cpu
ram
elapsed
Threads
--
id
process_id
name
cpu
status
elapsed
Если вы параноик — это еще не значит, что за вами никто не следит
Здравствуйте, c3p0, Вы писали:
C>Не понятно как сторить навигацию по таким таблицам. C>Например, выделил строку чтобы с ней поработать, а она убежала вниз, т.к. данные постоянно набиваются. C>Или другой кейс — например надо выделить несколько процессов и сделать им terminate.
Приостанавливать рефреш на время при user activity?
>Task Manager не? Если не, то чем плох?
Выглядит нормально при частоте добавления процессов 0.1 Hz
Непонятно что с ним будет при 10-20 Hz
>Показывать много строк? Или запилить гибрид дерева и таблицы? Или тебе именно дизайн нужен?
Хочу понять какой подход в дизайне применяют в таких задачах для отображения данных пользователю.
Выше писал про системные процессы и потоки.
Например, есть около 500 процессов, которые добавляются / уходят с частотой 10 в секунду.
У каждого процесса есть 100 потоков (threads), которые приходят уходят с той же частотой.
Как пользователю дать удобную навигацию по этим данным и работу с этими данными? Мониторинг, выбор элементов, действия над ними. В этом вопрос.
>А что вы хотите получить в итоге. Вы хотите увидеть значение на конкретный момент времени или видить как оно меняется или посмотреть историю изменений?
Пока просто хочу понять, какие есть подходы для навигации по таким данным. Книжку почитать чтоли, только не знаю какую.
>Вас беспокоит сможет ли таблица принимать столь большое количество строк?
Беспокоит что таблица будет мелькать и уезжать и с ней будет некомфортно работать юзерам.
Если вы параноик — это еще не значит, что за вами никто не следит
Здравствуйте, c3p0, Вы писали:
C>Таблица может принимать новые строки с частотой до 20 строк в секунду.
Это очень медленно. Действительно реалтаймовые UI могут принимать тысячи строк/элементов в секунду.
C>Как реализовываете подобное в вашем софте?
Стандартно — заполнение БД отделено от обновления UI, которое происходит с комфортной для пользователя частотой. Ну и желательно обновлять только изменившиеся элементы, а не все скопом.
Здравствуйте, c3p0, Вы писали:
C>Хочу понять какой подход в дизайне применяют в таких задачах для отображения данных пользователю.
Ную как минмум, пользователю нафиг не надо видеть изменения со скоростью 20 строк в секунду. Накапливать изменения и рефрешить раз в несколько секунд.
Так же надо озаботиться, чтобы точка интереса пользователя не уехала куданить при рефреше и чтоб не дергалось ничего. Ну. Добавленные/ измененные/ удаленные строки подсвечивать разным цветом
Здравствуйте, c3p0, Вы писали:
C>Т.е. цель — таблица системных процессов, которые могут создаваться и уничтожаться в системе с частотой 10-20 Hz C>При выборе одной из строк таблицы, справа отрисовывается таблица тредов, в которой, в свою очередь треды могут добавляться удаляться с той же частотой.
C>Не понятно как сторить навигацию по таким таблицам. C>Например, выделил строку чтобы с ней поработать, а она убежала вниз, т.к. данные постоянно набиваются. C>Или другой кейс — например надо выделить несколько процессов и сделать им terminate.
Я бы использовал снапшот. И обновлял бы его раз в секунду.
Потому что убегающие строки не позволят как-то осмысленно работать с ними.
_____________________
С уважением,
Stanislav V. Zudin
Здравствуйте, NWP, Вы писали:
NWP>Накапливать изменения и рефрешить раз в несколько секунд.
Раз в несколько секунд для многих применений будет слишком медленно. Будет создавать ощущение крайней тормознутости. Желательно давать юзеру возможность это настроить, причем минимум должен быть где-то в районе 0.1-0.2 с.
В линуксовой консоли есть управляющие команды Ctrl+S, Ctrl+Q для остановки и продолжения скрола в терминале. Возможно, в твоей задаче такое может быть полезно. По нажатию кнопки или хоткея останавливать скрол (и сделать строку с отображением сколько еще данных доступно в режиме остановки). Также, как уже предложили, при выделении строки она должна оставаться на экране (т.е. делать автоскрол поступающих данных).
Итого, в размороженном состоянии новые данные появляются на экране сразу (или с периодом в 1-2 секунды). При выделении строки она остается на экране, возможен ручной скрол. При остановке скрола все строки остаются на экране и появляется подсказка, сколько еще доступно данных (возможен либо ручной скрол, либо переход в размороженный режим).
Здравствуйте, c3p0, Вы писали: C>Не понятно как сторить навигацию по таким таблицам.
Вы с бестселлером DbgView от Марка Руссиновича знакомы? Вот так и делать. Просто и надежно. На утилитах Руссиновича все системные программисты учатся.
Посмотрите его же Precess Explorer — procexp.exe (а-ля TaskMen только лучше).
A>Вы с бестселлером DbgView от Марка Руссиновича знакомы? Вот так и делать. Просто и надежно. На утилитах Руссиновича все системные программисты учатся. A>Посмотрите его же Precess Explorer — procexp.exe (а-ля TaskMen только лучше).
Спасибо, ознакомлюсь.
Ну и сделаю небольшой coming out, это будет веб-интерфейс на js, который получает данные по вебсокетам. Но сути это не меняет. Разве что сложнее будет реализовать из-за отсутствия готовых компонент.
Если вы параноик — это еще не значит, что за вами никто не следит
Здравствуйте, c3p0, Вы писали:
C>Не понятно как сторить навигацию по таким таблицам. C>Например, выделил строку чтобы с ней поработать, а она убежала вниз, т.к. данные постоянно набиваются. C>Или другой кейс — например надо выделить несколько процессов и сделать им terminate.
Как варианты:
замораживать обновление (или радикально снижать его частоту) при нажатии заданной клавиши, возвращать в дефолтный режим при ее отпускании. Можно автоматом замораживать при нажатии ctrl и shift, т.к. они используются для множественного выбора;
фиксированно замораживать по любой кнопке, Scrlock, Numlock;
клавишами +/- увеличивать/уменьшать частоту обновления. То же, но колесом мыши в комбинации с ctrl, shift, alt.
В общем сл. кажется разумным полное замораживание по хоткею. Тогда в процессе выбора юзер может спокойно менять сортировку, скроллить, раскрывать и закрывать деревья, нажимать на кнопки, меню... Если характерны более короткие и простые действия — могут подойти др. вар-ты. Если данные в процессе работы с замороженным "дампом" критически меняются — надо что-то предусматривать.
Здравствуйте, c3p0, Вы писали:
C>Таблица может принимать новые строки с частотой до 20 строк в секунду. C>Можно выбрать строку, раскрыть и увидеть в ней подтаблицу, которая в свою очередь тоже может быстро меняться.
C>Есть специалисты по UI? Как реализовываете подобное в вашем софте?
Типичные ответы в стиле русскоязычных форумов: "вы всё не так делаете", "вам это не надо".
Ни в Wireshark, ни каком-нибудь Fiddler, ни в SQL Server Profiler ихними таблицами в режиме реального времени пользоваться невозможно -- там чрезвычайно быстро набегает ворох информации и в ней попросту захлебываешься. Лично у меня есть два типичных варианта использования:
Либо долго и утомительно играться с фильтрами перед тем, как запустить трассировку -- и в итоге получить одну-две-пять интересующих строк. Но в таком случае непонятно, зачем таблица -- можно сразу показать пять красивых "карточек"
Либо просто запустить трассировку, получить простыню данных, остановить трассировку и потом скроллить туда-сюда в поисках нужного.
HgLab: Mercurial Server and Repository Management for Windows