From Novosibirsk, Russia? Our tiny company is looking for current or future rock-star developers.

May 30, 2008

Связывание и внедрение объектов не работает

Вспомним времена Windows 3.1, когда буквально в каждой книге по консумерским приложениям описывалась замечательная технология Object Linking & Embedding. OLE казалась частью светлого будущего — того времени, когда отдельных приложений в мире существовать больше не будет.

OLE и в самом деле весьма продвинутая технология. Она позволяет в документ одного приложения вставить контент, создаваемый другим приложением. Хитрые OLE-контейнеры (единственным экземпляром которых являлся Microsoft Binder) могли даже этот чужой контент разбивать на свои страницы и делать ему сквозную нумерацию.

Теперь же я об OLE вспоминаю, только когда пытаюсь вставить диаграмму в презентацию. На маке ничего аналогичного OLE нет, поэтому приходится экспортировать диаграмму OmniGraffle в картинку и вставлять эту картинку в Keynote.

Но и под Windows OLE почти мертво — его больше не продвигают. Причина в том, что он слишком сложен, а пользователю меньше всего на свете хочется сюрпризов.

Вставка картинки в презентацию — совершенно понятное действие, картинка останется там и ровно такая, какая была.

Вставка в презентацию объекта, который ведет себя как картинка, но на самом деле является сложной штукой, что проявляется только в редкие моменты, создаёт ощущение непонимания. Теперь у тебя не просто документ, состоящий из того, что ты в него добавил — теперь в нем живет сложная своенравная штука.

Своенравность штуки, кстати, не только суеверие — встроенные (embedded) объекты порой действительно ведут себя неожиданно (например, при попытке их resize'ить, что выполняется масштабированием метафайла без активации OLE-сервера), а контейнеры зачастую начинают больше глючить.

Теперь о том, как можно сотворить более простой функциональный аналог OLE. Хитрости здесь две:

1. Сделать в OmniGraffle опцию «при каждом сохранении экспортировать диаграмму в картинку и класть рядом».

2. Сделать, чтобы Keynote проверял, не изменились ли на диске картинки, которые были вставлены в документ, и, если да, ненавязчиво предлагал опцию быстренько обновить их с диска.

Эффект такой же, ощущение предсказуемости процесса в разы выше. Заодно такие возможности полезны и для других применений.

Золотое правило: интерфейс не должен содержать сложных концепций.

Второе золотое правило: если из-за какой-то функции программа начинает больше глючить, пользователь свяжет эту функцию с мистикой и начнет её бояться.

Сложные функции больше подвержены ошибкам. Не пугайте ваших пользователей.

2 comments:

Anonymous said...

Можно еще проще, используя другую очень полузную концепцую windows множественого представления буфера обмена.

И скопировав диаграмму в экселе, ее без проблем через меню-специальная вставка, можно вставить в word.

Anonymous said...

Ну да, вспоминается байка на тему того, как проходила презентация OLE 2.0. Какой-то там инженер M$ сказал, что простейшее приложение с использованием OLE 2.0 состоит примерно из 20k LOC. Все выпали в остадок и забили. :)

Насчёт картинок. Не знаю. По-моему проще сделать в том же OO что-нибудь типа вставки с возможностью конвертации. И возможность выставить необходимость конвертации в картинку всяких левых объектов. Это будет удобно уже хотя бы потому, что если над документом работают несколько человек, один из которых включил автоимпорт в картинки, а другой нет, то произойдет разсинхронизация.