пятница, 11 февраля 2011 г.

Когда программы предполагают, что система никогда не изменится, эпизод 1

Это перевод When programs assume that the system will never change, episode 1. Автор: Реймонд Чен.

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

В Оболочке нам пришлось таскать с собой "мёртвые" иконки, которые нигде не использовались - и всё ради программ, которые считали, что они там должны быть. Но мы часто делаем такие "удочерённые" иконки пустыми, так что программы не будут вылетать, но и не будут здорово выглядеть.

Недавно я узнал о новом типе кражи ресурсов: выдирание анимации. В Windows Vista мы сделали много изменений в том, как система внутренне хранит ресурсы, чтобы поддерживать MUI (Multilingual User Interface). Одной из вещей, которые мы при этом обнаружили, было куча программ, которые лезли напрямую в Shell32.dll, чтобы получить анимацию копирования файлов. Как жаль что: (1) анимации теперь там нет, а даже если бы она там была: (2) анимация использует более современный алгоритм сжатия, который не поддерживается старыми программами.

Запомните: ресурсы в системных DLL должны трактоваться как деталь реализации, если противное не указано явно (в документации).

Я не уверен, что нам следует делать с этой проблемой. У кого-нибудь будут предложения? Следует ли нам просто объявить эти программы "сломанными" и послать людей, их купивших, за обновлениями? (Что если производителя больше нет?) Следует ли нам разработать заглушку и надеяться, что всего таких программ было вот эти четыре штуки? Следует ли нам оставить старую анимацию в Shell32.dll как мусор? Что если я скажу вам, что одна из программ, которая так делает, недавно получила титул "Game of the Year" - изменит ли это ваш ответ? Что если вторая программа окажется всем известной анти-spyware программой?

7 комментариев:

  1. В камментах была дискуссия. Я не помню навскидку, но, вроде, легальных способов получить эту анимацию нет?
    Если так, то разработчики из Microsoft в очередной раз ССЗБ.
    1. Все хотят, чтобы программы имели родной "look and feel".
    2. Штатных способов сделать этого нет.
    3. Используется нештатный.
    4. ???
    5. Конец немного предсказуем. :)))

    ОтветитьУдалить
  2. Как это нету? А Shell-ская функция копирования/перемещения?

    Ах, мы хотим в своих хитро-злобных целях... ну тогда в крайнем случае можно скопировать анимацию к себе (но мы ведь слишком ленивы!)

    Нельзя заранее предусмотреть всего на свете. Вот начали тырить иконки - MS ввела функцию получения иконок.

    ОтветитьУдалить
  3. Кстати, в тех же комментах Реймонд сказал:

    How do you propose preventing people from doing undocumented things? There was already a documented and supported mechanism (using the animations that came with Visual Studio), so "provide a documented alternative" already failed.

    Т.е. решение вполне себе было - использовать свою анимацию, поставляющуюся с VS.

    ОтветитьУдалить
  4. > Как это нету? А Shell-ская функция копирования/перемещения?

    Я сейчас не буду зуб давать, т.к. точно не помню, но, вроде, эта функция не анимацию показывает, а окно с анимацией, т.к. в своё окно её не встроить.

    > Ах, мы хотим в своих хитро-злобных целях...

    Хитро-злобные цели просты - обеспечить "look and feel" и для будущих версий, если в них анимацию перерисуют. Короче за что боролись... :)

    > использовать свою анимацию, поставляющуюся с VS

    И там же сказали, что не у всех есть VS. Например, у пользователей Delphi. ;-)

    ОтветитьУдалить
  5. Ну, верно, конечно.

    Но почему-то между двумя вариантами: "программа будет выглядеть как в XP (ресурсы копируем к себе), но будет работать в Vista (всё документировано)" и "программа будет выглядеть как в Vista (грабим ресурс), но не будет работать в Vista (ресурс удалили, не заметив, что его использует ваша программа)" люди часто выбирают второе :)

    ОтветитьУдалить
  6. Ну, остальные ничем не лучше Microsoft. :) Те не подумали, что надо отдавать не только текущие цвета, шрифты, контролы, но и ресурсы. А народ не думает о том, что они могут не только изменить анимацию, но и переложить её в другое место. :)

    ОтветитьУдалить
  7. Как говорит Реймонд: "люди часто жалуются, что MS не делает/реализует какую-то дополнительную возможность, но при этом почему-то считают совершенно нормальным не выводить свои собственные программы на хотя бы уже существующий уровень".

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.

Примечание. Отправлять комментарии могут только участники этого блога.