Мысленный эксперимент "представьте, если бы это было возможным" является полезным, когда вы думаете, может ли Windows делать то или это (частным случаем этого эксперимента является "Когда люди просят дыры безопасности в качестве новых возможностей ОС"). Если эта возможность приводит к очевидным противоречиям или нарушениям общепринятых правил метафизики, то можете быть уверены, что Windows не поддерживает эту возможность (конечно же, отсутствие противоречий ещё не доказывает, что Windows поддерживает возможность. Но вы можете использовать это правило для отбраковывания очевидных плохих идей).
Вопрос "Что если две программы сделают это?" также является полезным инструментом в оценке возможности или решения дизайна. Соединение его с "представьте, если бы это было возможным" приводит к впечатляющим результатам. Вот несколько примеров:
"Как я могу создать окно, которое никогда не будет перекрыто другими окнами, даже теми, которые topmost, т.е. поверх-всех?"Представьте, если бы это было возможным, и если бы две программы сделали это. Программа А создаёт окно, которое "супер-повер-всех". Также поступает и программа Б. Теперь пользователь перетаскивает окна так, что они пересекаются. Что должно произойти? Вы только создали себе логическое противоречие. Одно из этих окон обязано быть поверх другого, но это противоречит возможности "супер-повер-всех".
"Как я могу пометить мой процесс, чтобы он всегда был первым/последним для получения уведомления о завершении работы? Я хочу сделать что-то до/после завершения всех программ."Представьте, если бы это было возможным, и если бы две программы сделали это. Теперь у вас есть две программы, которые хотят быть первыми/последними. Но у вас не может быть две первых или две последних программы. Одна из них должна уступить (конечно же, этот пример - просто обобщение других вещей, которые люди хотят делать самыми первыми или самыми последними).
"Как я могу сделать так, чтобы файлы .XYZ всегда открывала только моя программа?"Представьте, если бы это было возможным, и если бы две программы сделали это. Пользователь щёлкает на файл .XYZ. Чья программа должна быть запущена?
В этом случае решение - оставить пользователю контроль за его ассоциациями, чтобы он сам выбирал, хочет ли он использовать вашу программу или вашего конкурента. Это его решение, и вы должны уважать его.
Мой коллега Zeke, кто ответственен, среди прочих вещей, за то, как работают файловые ассоциации в Проводнике, добавил несколько альтернатив:
- Занесите свою программу в список "Открыть в" и укажите, что вы поддерживаете тип .XYZ. Пользователь сможет щёлкнуть правой на файле .XYZ и выбрать "Открыть в...", после чего выбрать вашу программу из списка.
- Зарегистрируйте отдельное действие (verb) типа "Открыть в ваша-программа". Пользователи могут щёлкнуть правой кнопкой на файл .XYZ и выбрать пункт "Открыть в ваша-программа".
Для многих вопросов рода "Я хочу быть самым X-тым", вы часто можете придумать какой-то хак, типа запуска таймера, который периодически проверяет, являетесь ли вы X-тым, и, если это не так, делает вас таковым. Но тогда, если вы притормозите и подумаете: "Но что если две программы сделают это?", то осознаете, что это не такая уж хорошая идея. По крайней мере, я надеюсь на это.
Даже после этого объяснения, некоторые люди не понимают этого. Я призываю их рассмотреть: "что если две программы будут так делать? Они будут сражаться друг с другом", но они говорят: "тогда я сделаю так, чтобы вторая программа проверяла, не запущена ли первая". Они не осознают, что не они пишут вторую программу.
Когда две программы начинают борьбу такого рода, вы не можете предсказать, кто победит, но зато вы можете предсказать, что проиграет на 100%: пользователь.
Я хорошо помню, когда один из моих коллег позвал меня в свой офис, чтобы показать мне две очень известные коммерческие программы, которые хотели гарантировать, что они будут программами, которые запустятся, когда пользователь щёлкнет по файлу .XYZ. Поскольку такой гарантии дать нельзя, обе программы использовали хак с таймером.
Вы устанавливали одну программу, она регистрировала себя обработчиком фалов .XYZ - и пока всё шло нормально. Потом вы устанавливали вторую программу, и она тоже регистрировала себя новым обработчиком файлов .XYZ. Первая программа замечала это и говорила: "Неа. Я - программа, которая обрабатывает файлы .XYZ" и меняла настройки назад. Теперь вторая программа говорила: "Не может быть! Я - программа, которая открывает .XYZ" и меняла настройки снова!
Эта детская игра "ты не прав/нет, ты не прав" продолжалась, пока пользователь сидел перед машиной чувствуя себя идиотом, беспомощно глядя на бесконечную смену значков у .XYZ файлов в драке между двумя программами, каждая из которых эгоистично считала, что именно она оказывает пользователю "услугу", настаивая на том, что именно она открывает файлы .XYZ.
Читать далее: практический экзамен.
История с таймером - забавная. И сама мысль "а что будет" - очень здравая, да. Жаль не всегда она вовремя приходит в голову.
ОтветитьУдалить...Бог, по-определению, всемогущ. Может ли тогда Бог создать камень, который сам же не поднимет?..
ОтветитьУдалитьИз всех правил есть исключения. Если ПО предназначено для выполнения одной функции, например, пос-терминал или еще что-то подобное и оператор т.е. работник по задумке владельца не должны иметь возможность сворачивать оболочку программы и играть в солитер или еще каким-то облазом (клава калтавит...) шалится по лабочему столу. Тогда механизмы монопольного захвата эклана востлебованы и обоснованы. В данном случае PC становатя не полнофункциональной машиной, а однозадачной станцией.
ОтветитьУдалитьДля этого есть kiosk mode.
ОтветитьУдалить