Comments 72
Статья ради статьи? Ну елки палки. Этим основам эргономики. Сто лет в обед
Хорошая статья, есть на что сослаться. Для многих в настоящий момент — эти истины не очевидны
По статье благодарю автора. Хоть новых примеров реализации этих вещей я не увидел, но исчерпывающие ответы на данную тематику получил.
Данный ресурс всё же, должен быть на острие технологий. А основ в интернетах и так хватает.
На кой плодить банальщину? Ее и так уже 90% всего интернета
Если действие, которое выполнил пользователь, нельзя отменить — откладывайте его выполнение. Например, в Gmail есть возможность откладывания отправки писем на 15 секунд.Немаловажно, что бы само действие все же выполнялось, если его не отменили:)
в Gmail. Там, в верхней части экрана, показывают жёлтый баннер, содержащий ссылку для отмены действия.
В том смысле. что вот в гмыльном приложении есть такая бага — удалил сообщение, и вроде пошел дальше делами заниматься, потом минут через 15 смотришь — удаление не сработало. Или отправил, а оно так и не отправилось и валяется в черновиках. Бесит неимоверно.
Тут логика в том чтобы сломать автоматизм — увидел окно — нажал согласие и еще раз посмотреть толи ты собираешься удалить.
специально для github пришлось стать мастером копипаста, за что и поплатилсяВы уж меня извините, но если вы репозитории удаляете, как нормальные люди, раз в месяц или раз в год, то вы не станете «мастером копипаста».
А если вы стали — то задумайтесь, почему…
Настройки (Settings) > Репозитории (Repositories), там будет переключатель на удаленные, будут кнопки «восстановить» (Restore).
то есть там удаляется репозиторий, который вы вводите, а не проверяется то, что выбрано для удаления с тем, что вводите?
Вот у меня операция очистки некоего журнала событий. Выводится окно подтверждения, и в случае ответа «Да» — выполняется очистка без возможности восстановления (память заполняется нулями, речь о микроконтроллере или ПЛИС, интерфейс с пользователем — на ПК).
Как это подтверждение можно заменить на Отмену действия?
Отменить Отмена
:D не стоит искать в этом какой то смысл, отмена действия нужна в популярных кейсах (я часто удаляю файлы в корзину, но у меня остается вариант восстановления из корзины), но предупреждение нужно перед редкими кейсами (форматирование диска например).
Считать текущее состояние и восстановить, как вариант.
Как делают при апдейтах сложных железок — удваивают хранилище, заливают новую прошивку во второй раздел, проверяют и потом, как можно более атомарно, переключают разделы, оставляя старое как read-only. Помогает, если что, откатиться.
Но вот по какому критерию выполнять настоящую очистку?
Если по времени — то через какое? А если до истечения этого времени нудно будет показать журнал пользователю. или, не дай бог, добавить туда новую запись?
А можно просто, поскольку у нас задача просто спастись от мисскликов, временно сместить указатель начала списка на конец записей, и запустить таймер секунд на 30. По окончанию (или если место под журнал кончилось), физически уже обнулить память и сдвинуть обратно. А если юзер нажал отмену, то просто двигать обратно без обнуления.
Также можно просто писать записи по одной с начала, очищая хвост по достижении N. Тогда полная отмена не будет возможно, но процент потерь будет обратно пропорционален времени до отмены.
Это проблема баланса между скоростью работы с базой и безопасностью. Граница всегда будет не очень комфортна.
Странно что такое тривиальное решение не приходит в голову.
Ну вот пример. Мы работаем с БД. Таблиц очень много (тысячи, если не десятки тысяч). Для каждой таблицы есть модуль ее ведения (добавление/удаление/изменение записи). Все изменения делаются только через него.
У каждой таблицы есть т.н. «журнал» в котором есть заголовок (там содержится в том числе и информация кто и когда вносил изменеия). Этот заголовок есть ключ. Дальше идет образ записи. При изменении туда заносится две записи — с образами Before и After (при удалении только Before, при добавлении только After).
Есть еще «головной журнал» — туда пишется имя таблицы, тип изменения и заголовок для поиска записи в детальном журнале.
Такая система позволяет мониторить все изменения в таблицах и откатывать (по журналу в обратном порядке) состояния таблиц обратно на любой момент времени.
Если у вас есть возможность прочитать текущее содержимое ПЛИС, то перед любым изменением его можно прочитать и занести в журнал на ПК. А потом откатить при необходимости.
Особенно умиляют молодые UXD, которые на голубом глазу приносят бизнес-аппам картинки с нотификашками типа «сотрудник Иван уволен [отменить]». Уходят грустные, обиженные почему-то на разрабов.
Кто-нибудь хоть приписывал к таким статьям врезку про то, почему UXD часто с такими штуками посылают. Можно что-нибудь про мульти-вселенные, с отсылками к фильму «Назад в будущее» — часто именно настолько сложно сделать отмену действия. Особенно когда у тебя распределенная система, и ты запустил процесс, в котором параллельно участвует десятки систем и людей.
Никто не предлагает делать бесконечную возможность отмены, это действительно, не всегда возможно. Возможность отмены нужна для защиты от ошибочных действий. Если руководитель понял, что уволил не того сотрудника, спустя неделю после увольнения, то это уже клиника.
Впрочем, хорошее повтори и еще раз повтори.
В принципе, в мире программ все можно либо отменить (применив обратную операцию), либо заснепшотить и откатить (если обратной функции не существует, или она слишком трудоёмка). Другое дело взаимодействие с физическим миром — если после подтверждения фреза уже коснулась заготовки — то обратного пути не может быть.
В реальности же заниматься имплементацией обратимых операций часто никто не хочет, поэтому ограничиваются грозными попапами с красным болдом и капсом — но это, как всем здесь очевидно, защищает скорее самих авторов программ от претензий пользователей.
Более-менее вменяемым компромиссом может быть внезапный вопрос/задание, ломающее шаблон мыслей юзера — типа «введите простое число, большее X” — но это тоже не 100% панацея — так как мозг часто проявляет свою «двухядерность» — одна часть не задумываясь о смысле продолжения просто просит вторую решить задачу и нажать ОК вместо просто нажатия ОК ;)
Плюс полминуты к программе погоды не делают, она может часы занимать, а удобства такой подход добавляет.
Чем заставлять пользователя прыгать выше головы, нажимая на красные кнопки, лучше подумать и помочь ему поменьше косячить.
Как проверить, удалено или скрыто? Ждать слива? Ставить прокурора каждому сервису?
Как организовать удаление в бд, которые не рассчитаны на удаление из-за фрагментации и других фич с этим связанных?
Но естественно, удаление должно рано или поздно привести к удалению.
У нас нет и никогда не может быть задачи сделать так, чтобы у пользователя были «исключительно его проблемы», это худшее что может случиться с UX. У нас должна быть задача сделать пользователю удобно, и она решается в том числе подкапотной магией временных бэкапов, не смотря на то что там написано на кнопке.
Опять же, когда вы нажимаете удалить на файл, он физически-то не удаляется, а только помечается удаленным. С этим-то у вас нет проблем?
Если я хочу удалить свой аккаунт в социальной сети (даже если на меня сейчас нашло помутнение), то надо это сделать, а не просто скрыть мою страницу, что б потом за мой лайк под неугодной правительству фото меня ещё привлекли.Вы хотите, чтобы социальные сети перестали выполнять свою основную (с точки зрения правительства) функцию?
Я боюсь тут даже вопрос не в UXD, а в юристах.
(Бэкапы вроде ни кто не отменял)Ну вот вы же просите их отменить.
На самом же деле просто нужна адекватность мер.
Бывало приходилось набирать YES полностью и нажимать ENTER, чтобы подтвердить намерения.
Согласен насчёт названия кнопок. Гораздо легче бездумно кликнуть на «ОК», чем на «Удалить most-important-file.txt»
А какие минусы у промежуточного варианта — кнопка, которую надо удерживать некоторое время? Что-то редко где вижу такое решение. И случайно не нажмётся, и отменить есть возможность.
И случайно не нажмётся, и отменить есть возможность.Нажмётся, разумеется. Сознание так устроено. Всё, что происходит между началом действия и моментом, когда оно завершено и можно расслабиться, после достаточного числа повторений мозг склассифицирует и упрессует в одно метадействие «удалить репу».
Даже если вы там чечётку заставите на камеру сплясать — неважно абсолютно. Хоть два клика, хоть долгое нажатие, хоть как.
Отмена в течении некоторого времени действует за счёт того, что вот это самое автоожидание после отправки/удаления — «вас не касается». «Репа», с точки зрения мозга, удалена, процесс завершён… можно «открутить стек задач» на один шаг и подумать — а ту ли, вообще, мы репу-то удалили, чёрт побери?
а если предоставить пользователю выбор через доп. настройки?
Меня вполне устраивает обычные операции по удалению делать с возможностью отмены/восстановления, а безвозвратные — с отдельным подтвержением. (напр. Del удаляет файл в корзину, а Shift+Del — совсем удаляет, но перед этим спрашивает, в здравом ли я уме и твёрдой памяти) :)
Что лучше: подтверждение действия или возможность его отмены?