• Давать любому желающему возможность выполнять на вашем компьютере свои программы - более чем рискованная затея. В отличие oTJavaScript–сценария, в котором соответствующих средств нет и не может быть в принципе, программа на обычном языке программирования способна заразить вас вирусом, попортить данные на вашем диске или уворовать конфиденциальную информацию.
• Наконец, довольно трудно обеспечить небольшой объем файла с программой, приемлемый для перекачивания по сети. Если графику всегда можно попытаться оптимизировать, уменьшив ее размер за счет некоторой потери качества, то объем файла программы почти не поддается изменению без существенного усечения ее функций.
На данный момент существуют три технологии встраивания программных объектов в документ. Все они так или иначе пытаются справиться с перечисленными ограничениями.
• Технология подключаемых модулей (plug–in modules) подразумевает наличие двух компонентов: общего для всех объектов данного типа модуля, который достаточно перекачать из сети один раз и установить на компьютере пользователя как обычную программу, и подключаемых к HTML-странице объектов. Последние интерпретируются и выводятся на отведенное им место в пределах страницы соответствующим модулем, запуск которого (как правило, в фоновом режиме, т. е. без создания собственного окна) берет на себя броузер.
Объекты могут состоять исключительно из данных - например, звукозаписи или изображения в особом формате, обрабатываемом только этим модулем. Если же они включают в себя и программный код, то объем его, как правило, невелик, так как самая трудоемкая часть доступных объекту функций реализована внутри основного модуля. Это позволяет добиться небольших объемов пересылаемых по сети данных (разумеется, "небольшими" они будут только после того, как пользователь перекачает себе сам модуль, объем которого редко опускается ниже мегабайта).
Проблема безопасности при использовании модулей обычно не стоит: очень немногие типы объектов хотя бы в принципе способны навредить компьютеру, на котором они выполняются, и в любом случае от них можно защититься, просто не устанавливая себе соответствующий модуль (к счастью, установить на компьютер новый модуль без ведома пользователя невозможно). Что же касается третьего ограничения - межплатформенной несовместимости, - здесь никакого облегчения нет и не предвидится: разработчикам модуля, как и любой другой программы, приходится создавать отдельные его версии для каждой операционной системы (к счастью, это относится только к самому модулю, а не к встраиваемым в веб–страницы объектам).
● Апплеты на языке Java, при всех своих особенностях, имеют немало пунктов сходства с подключаемыми модулями. Основную часть выполняемой апплетом работы берет на себя не передаваемый по сети объект минимального объема, а большая программная система, называемая "виртуальной машиной Java" и устанавливаемая на компьютер пользователя только раз (в отличие от подключаемого модуля, пользователю не приходится перекачивать ее из сети, так как оба визуальных броузера поставляются уже со встроенными виртуальными машинами). Подключаемый к веб–странице объект содержит так называемые "байтовые коды" - нечто среднее между исходным текстом и скомпилированным двоичным файлом программы, компромисс между идеалами быстродействия и переносимости.
Набор функций у апплетов ограничен даже сильнее, чем у подключаемых модулей. Хотя Java и относится к полнофункциональным языкам программирования, в апплетах этот язык имеет дело не с реальным компьютером, а с внутренностями виртуальной машины, надежно ограждающей компьютер от любых продуктов жизнедеятельности апплета. Конечно, везде, где есть защита, можно постараться ее обойти, и поиск "дыр" в виртуальных машинах доставляет и долго еще будет доставлять приятные минуты компьютерным взломщикам. И все же в целом Java–апплеты можно считать достаточно безопасной технологией.
К сожалению, виртуальная машина у каждого из броузеров своя, и, несмотря на декларируемую совместимость между ними, апплет, который работает на одной из этих машин, иногда может отказаться работать на другой. Кроме того, как и любая многоуровневая система, Java–апплеты в сравнении с обычными программами сильно проигрывают в быстродействии. Наконец, необходимость "настоящего" программирования для изготовления апплетов обуславливает трудоемкость этого процесса. С другой стороны, наличие готовой виртуальной машины почти на каждом компьютере и, опять–таки, богатые возможности полнофункционального языка программирования открывают перед этой технологией определенные перспективы. Так, уже упоминавшаяся технология Macromedia Flash (стр. 58) позволяет сохранять Flash - "мультики" в виде Java–апплетов, для работы которых не нужен установленный на компьютере Flash–модуль.
● Одно время Java–апплетам пытались составить конкуренцию так называемые "компоненты ActiveX" - технология фирмы Microsoft, ограниченная только броузером Internet Explorer и только платформой Windows. Это наделавшее поначалу много шума, но быстро забытое нововведение интересно отсутствием какой бы то ни было "прокладки" между программным модулем (по сути, обычным исполняемым файлом в формате Windows) и операционной системой. Для решения проблемы безопасности была разработана система "электронных подписей" с регистрацией законопослушных авторов ActiveX-апплетов у спонсируемых Microsoft "цифровых нотариусов". Неудивительно, что эта громоздкая система оказалась нежизнеспособной. В настоящее время изредка используются лишь ActiveX-объекты самой фирмы Microsoft, поставляемые вместе с ее броузерами.
В Windows–версии броузера Internet Explorer (начиная с версии 4) технология ActiveX является не одним из усовершенствований, а буквально фундаментом всей программы. При запуске броузера управление получает контейнер, сразу же вызывающий ActiveX-модуль, в котором, собственно, и заключены все функции броузера. Любой программист может, таким образом, без труда встроить в свою программу самый настоящий броузер, написав всего лишь небольшую функцию для вызова этого модуля и обмена данными с ним. Отдельные функциональные блоки броузера - виртуальная машина Java, интерпретатор HTML и даже сам блок взаимодействия с органами управления ActiveX - реализованы в виде ActiveX-модулей.
ДИНАМИЧЕСКИЕ СТРАНИЦЫ
Все рассмотренные выше технологии программирования, расширяющие возможности веб–страниц, предполагают пересылку на компьютер пользователя и последующий запуск на нем некоторого программного модуля, так или иначе связанного с "несущим" HTML-документом. Интересно, однако, рассмотреть здесь же серверные технологии программирования, предназначенные не для спецэффектов на экране пользователя, а для автоматической генерации посылаемых ему страниц (которые, в свою очередь, уже могут содержать программные вставки "уровня клиента").
По некоторым оценкам, больше половины всех страниц в современном Интернете генерируются и обновляются динамически - на основе информации из баз данных, в ответ на действия пользователя или в зависимости от каких–то внешних обстоятельств (например, текущей даты или курса доллара). Простейшая технология такого рода, поддерживаемая почти всеми веб–серверами, называется SSI (Server Side Include, "Вставки на уровне сервера"). Возможности ее ограничены вставкой внутрь одного HTML-файла содержимого другого, автоматической установкой даты, подсчетом числа загрузок страницы и т. п. Из более сложных технологий создания динамических сайтов особенно популярны две: CGI и ASP.
Стандарт CGI (Common Gateway Interface, "Общий интерфейс шлюзов"), поддерживаемый большинством программ–серверов, не накладывает каких–либо ограничений на используемый язык программирования, а лишь перечисляет правила, которые должна выполнять программа, генерирующая веб–страницу, чтобы сервер мог запускать ее в ответ на запрос документа с определенным URL. Однако поскольку большинство таких программ пишутся на специализированном языке Perl, термины "CGI" и "Perl" часто употребляются как синонимы. Стандарт CGI достаточно прост и, в частности, ничего не говорит о взаимодействии с какими бы то ни было базами данных, оставляя этот аспект целиком на совести самой CGI-программы и того языка, на котором она написана. Язык Perl не является собственностью какой–либо фирмы, и существуют бесплатно распространяемые интерпретаторы этого языка для всех операционных систем.
Альтернатива CGI, появившаяся в последнее время, - язык ASP (Active Server Pages, "Активные страницы на сервере") фирмы Microsoft (вполне естественно, что поддержка ASP существует пока только в веб–сервере IIS этой же фирмы). asp–код хранится не в отдельных объектах, а встраивается прямо в HTML "активной" страницы, но в отличие от JavaScript никогда не выходит за пределы веб–сервера. Инструкции языка ASP позволяют генерировать фрагменты HTML-кода, выбирать один из вариантов кода в зависимости от каких–то условий, циклически повторять куски HTML с изменениями и т. п. ASP-файл может состоять целиком из ASP-инструкций, а может и быть чистым HTML без единой ASP-вставки; так или иначе, сервер отсылает броузеру только "сухой остаток" HTML после выполнения всех команд ASP. С практической точки зрения главным достоинством ASP являются развитые средства доступа к базам данных, многие из которых, как и веб–сервер Microsoft, работают на платформе Windows NT.
Основы дизайна
Я не очень–то погрешу против истины, сказав, что вся эта книга была написана ради единственной главы - той, которую вы начинаете читать. Уверенное владение современными технологиями веб–дизайнеру необходимо, однако в основе его мастерства лежат все–таки куда более фундаментальные и медленнее устаревающие знания.
От читателей моих статей по веб–дизайну, публикуемых по адресу www.webreference.com/dlab/, я получаю немало писем с одобрением их скорее теоретической, чем практической направленности (особенно выделяющейся на фоне бесчисленных сайтов с "How To" и "Top Ten Dont's", на разные лады повторяющих небольшой набор разрозненных практических советов). Многие читатели спрашивают, где начинающий веб–дизайнер - иногда поневоле, иногда по зову сердца окунувшийся в эту область творчества, но никогда не учившийся в художественном училище и даже не очень хорошо представляющий, чему там учат, - мог бы найти достаточно полный и в то же время по возможности популярный курс основ дизайна.
Хорошие книги по теории дизайна, конечно, есть. Но вместо того, чтобы опираться на авторитет классиков, я решил сам написать небольшое введение в предмет.
Поводов для такого решения несколько. Во–первых, тема моей книги - именно веб–дизайн, а не дизайн вообще. И хотя на теоретических основах это различие сказывается в последнюю очередь, некоторую интернетовскую специфи- ку полезно ввести уже на самом базовом уровне. Очевидно, хороших с дизайнерской точки зрения книг, написанных на этом новом материале, еще совсем немного, если они есть вообще (во всяком случае, на русском языке). Поэтому было бы глупо не попробовать свои силы в этой только что открывшейся области - тем более что, во–вторых, упомянутые выше статьи дали мне хороший задел для начала работы. Хотя эту главу, конечно, нельзя назвать автопереводом с английского, все же довольно многое в ней построено на материале моих статей.
Наконец, есть еще одна причина, без которой я бы не рискнул взяться за столь ответственное дело, как написание учебника дизайна. Причина эта заключается в свойствах дизайна как науки (разумеется, я вынужден здесь подходить к дизайну именно с этой точки зрения, поскольку "учебник искусства" - не очень–то осмысленное сочетание слов).
Подыскивая аналог теории дизайна среди наук традиционных, нельзя не заметить, что она стоит гораздо ближе к таким гуманитарным дисциплинам, как философия или филология, а не к точным наукам вроде математики. Как и в дизайне, в философии есть свои общепризнанные факты, принципы и подходы, истинность которых никто не подвергает сомнению. Однако ценность нового философского сочинения определяется все же свойствами скорее субъективными: новизной идей, убедительностью аргументации, иногда даже достоинствами литературного стиля. Философскую систему невозможно опровергнуть в принципе - она живет по своим собственным законам, и Витгенштейн не "опровергает" Платона, хотя и противоречит ему на каждом шагу.
Почти то же самое, с некоторыми оговорками, можно сказать и о любом дискурсе в области теоретического дизайна. Даже опираясь на примеры из практики, автор волен трактовать их сколь угодно субъективно (собственно говоря, многие категории дизайна и невозможно оценивать объективно) - так, как того требует выстраиваемая им система понятий. Вот почему я взял на себя смелость представить на суд читателя свою собственную, если так можно выразиться, философию дизайна.
Как учиться дизайну. Философия эта, как и любая философия, родилась из наблюдений, размышлений и сопоставлений. Я совсем не хочу, чтобы вы всегда и во всем разделяли мою точку зрения; моя цель - не вербовать сторонников, а сделать так, чтобы после прочтения этой книги вы глубже понимали свое ремесло и свободнее чувствовали себя с палитрой дизайнера в руках. Поэтому я призываю вас сразу же проверять все почерпнутые здесь знания своей практикой и анализом чужих работ и не пугаться, если ваши выводы не совпадут с моими. (И разумеется, я всегда буду рад услышать от вас любые комментарии или возражения как по теоретическим, так и по самым что ни на есть практическим вопросам веб–дизайна. Пишите мне по адресу: mailto: dmitry@kirsanow.com.
Самостоятельный теоретический анализ, критика и разбор чужих творений - один из лучших способов обучения практическому дизайну. Резонерствуйте, абстрагируйте, сочиняйте теории на ходу, спрашивайте себя "а что, если"; загрузите копию нравящейся вам страницы в графический редактор и посмотрите, можете ли вы ее улучшить или хотя бы изменить, не ухудшив. Немедленно обобщайте все, чему вы научились на практике и старайтесь сразу же делать практические выводы из своих теорий. Не огорчайтесь, если наткнетесь на противоречие, - ведь осознанное противоречие есть лучший двигатель мысли.
Очевидно, совет этот подходит не всем - вы можете быть одаренным дизайнером и притом не иметь никакой склонности к теоретизированию. Но и в этом случае для развития художественных способностей нет ничего лучше, чем свободное экспериментирование как с чужими работами, так и на чистом листе бумаги. В упражнениях этих нужно найти оптимальное соотношение бесцельности и целенаправленности; вы не должны при этом зависеть от вкусов и потребностей какого бы то ни было заказчика (хотя стоит прислушиваться к мнению собратьев–дизайнеров), но в то же время вы сами должны каждый раз ставить себе жесткую цель - скажем, повторить виденный где–то эффект, опробовать новый шрифт или составить красивую композицию из одних только треугольников или букв "Ю" из разных шрифтов (писатели знают, как хорошо развивает словарный запас сочинение рассказов на заданную букву). Удовлетворение от достижения цели, даже если цель эту вы придумали для себя сами, - лучший стимул к продолжению занятий
Дизайн и "чужое творчество". Попробуем теперь определить место той области визуального творчества, которой мы собираемся заниматься, среди других видов дизайна. Из жанров более или менее традиционных веб–дизайн ближе всего стоит к дизайну книг и журналов, скрещенному с дизайном интерактивных компьютерных программ. Кое–какие черты он унаследовал также от дизайна рекламы, теле - и видеопродукции. Пожалуй, вернее всего определить эту смесь термином информационный дизайн, так как его главное назначение - помогать потребителю воспринимать и усваивать некую информацию, а не, скажем, пользоваться вещью (промышленный дизайн) или делать выбор (реклама).
Что же определяет дизайн как таковой, что отличает его от других визуальных искусств? Помимо очевидно утилитарного назначения, одно из главных отличий заключается в том, что дизайнер использует в своей работе - а нередко и кладет в ее основу - не им созданные художественные ценности. Не только текстовое содержимое сайта или страницы принадлежит обычно другим людям; норма в профессиональном дизайне сегодня - использование покупных фотографий, заказной графики, не говоря уж о создаваемых специализированными компаниями шрифтах. Как и в других областях массового производства (а дизайн в современном обществе - очень даже массовая индустрия), разделение труда дает наилучшие результаты: скомпоновав работу профессионального фотографа, профессионального художника и профессионального автора текста, дизайнер обычно получает лучший результат, чем если бы всем от начала до конца пришлось заниматься ему одному.
Веб–дизайн, однако, в массе своей есть явление любительское - и таким он, по–видимому, останется в обозримом будущем (если только, конечно, в дизайнера не превратится каждый второй житель планеты). Это не значит, тем не менее, что любители лишены возможности пользоваться продукцией профессионалов. Вы вполне можете позволить себе купить для своего любимого проекта качественный цифровой шрифт или сканированную фотографию, и чем больше будет покупателей у компаний, торгующих таким товаром, тем ниже будут цены (которые и без того вполне демократичны).
Разумеется, чтобы решиться потратить даже несколько долларов на образец "чужого творчества", вы должны хорошо представлять себе, для чего он вам нужен, - что само по себе уже предполагает некую степень профессионализма. К сожалению, многие начинающие дизайнеры предпочитают вместо этого пользоваться наихудшей из всех разновидностей "чужого творчества": рисуемыми и бесплатно раздаваемыми такими же любителями кнопками, линейками, фонами и прочей "графикой для оформления сайтов" (см. также стр.153).
Материалы и инструменты. Эта глава состоит из двух частей. В первой части рассматриваются те абстрактные материалы, с которыми работает дизайнер: размер, форма, цвет, текстура и шрифт. Эти визуальные аспекты объектов - основные краски на вашей палитре дизайнера, и чтобы уметь пользоваться ими, вы должны знать их характерные свойства, сильные и слабые стороны и поведение в разных ситуациях.
Но чтобы научиться строить здания, недостаточно знать свойства кирпичей. Вторая часть главы (начиная со стр.149) расскажет вам о фундаментальных принципах дизайна, определяющих, что можно и чего нельзя, что хорошо и что плохо, как среди бесчисленного множества сочетаний элементов отыскать наилучшее. Эти принципы - единство, баланс, контраст, динамика и нюансировка - суть те инструменты, которыми вы будете работать с материалами своей композиции.