Ява, сэр!

(Революция прикладушек откладывается)


Дмитрий Манин

Горячая, ароматная, возбуждающая...

Забавна история Явы: она разрабатывалась в SUN'овских лабораториях как язык программирования микропроцессоров, встроенных в электробытовые приборы, под невыразительным названием Oak (это слово не несет в английском языке эмоциональной нагрузки, свойственной русскому "дуб"). Проект едва не заглох бесславно, но в 1995 году в связи с интернетовским бумом разработчики решили попробовать приспособить его к Паутине. Язык перекрестили в Яву (имея в виду яванский кофе - вещь горячую, ароматную и возбуждающую) и бешено разрекламировали, обещая очередную революцию. Прошло совсем немного времени, и тысячи программистов уже пишут на Яве, на ней разрабатываются серьезные проекты (и я не удивлюсь, если скоро появится операционная система, полностью написанная на Яве), но вот революции в Паутине что-то не наблюдается. Ничего сравнимого с появлением графической смотрелки или форм и интерфейса CGI. Хотя все эти тысячи программистов написали уже десятки тысяч программ. Но где они? Почему мы их не видим?

Да простит меня искушенный читатель, но я осмелюсь напомнить несколько азбучных истин. Ява - это нормальный язык программирования, каких только в Yahoo насчитывается около 70 - от языка ABC до языка Z. Программа на Яве состоит из самостоятельных кусочков-классов, которые подгружаются по мере необходимости и исполняются не непосредственно операционной системой, а специальной программой - интерпретатором (как Basic, в отличие от C). Это не совсем эффективно, зато позволяет исполнять программу на любой машине независимо от ОС и архитектуры - был бы на ней интерпретатор. Поскольку интерпретатор Явы встроен непосредственно в смотрелку, она может крутить явскую программу прямо внутри HTML-страницы. В отличие от программы на Basic'е, которую вы должны самостоятельно сгрузить и вручную запустить в отдельном окне, тут все происходит само собой. Кроме того, смотрелка по мере сил следит за тем, чтобы исполняемая программа вела себя прилично - не лазила на диск и т.п. Во всем же остальном, повторюсь, сакраментальное слово applet означает попросту "маленькая прикладная программа": application, сокращенный торопливыми американцами до app + суффикс -let. Прикладушка.

Приложение прикладушек

Любая программа состоит из данных (включая интерактивный ввод пользователя) и кода, т.е. инструкций машине, что с этими данными делать. Исходная модель Паутины - передача данных (страниц) с сервера клиенту. Формы и CGI позволили передавать их в обратном направлении - от пользователя серверу, там эти данные обрабатывать и возвращать результат - новую страницу, возможно уникальную, которую больше никто, кроме этого пользователя, не увидит. Что же может к этому добавить прикладушка, на каком бы языке она ни была написана? Теперь мы можем пересылать клиенту еще и код. Он будет работать не только с пересланными данными, но и с данными, введенными пользователем (интерактивность), - вот и все.

Много это или мало?

Все зависит от того, насколько глубоко программа перерабатывает данные, насколько нетривиальные вычисления она производит. Иначе говоря, от соотношения размеров кода и данных. Возьмем для примера прикладушку, показывающую движущиеся картинки. Если задача кода сводится к показу по очереди кадров мультипликации, переданных с сервера, ясно, что данные многократно перевешивают код, и это "неинтересная" программа. Другая крайность - программы, работающие вовсе без данных, генерирующие изображение "из головы". Таковы, например, генератор случайных мондрианообразных картинок или мой прутковский фантик. Обе гораздо интереснее простой мультипликации, но вторая явно интереснее первой. Во-первых, потому, что она более интерактивная, а во-вторых, потому, что сложнее вычисления (программа честно моделирует распространение волн на глубокой воде).

По небольшому размышлению мы видим первую выгоду Явы (помните, что питон Скалистый Змей говорил Слоненку?): можно передавать данные, которые вы хотите показать пользователю, в сильно упакованном виде, вместе с прикладушкой, которая их распакует и покажет. Работая с данными, поддающимся такой упаковке, можно значительно выиграть в объеме, а тем самым и во времени передачи. Здесь, правда, напрашиваются аналогии с колмогоровской теорией сложности. По Колмогорову, сложность объекта определяется минимальной длиной программы, которая его создает (случайная последовательность чисел - очень сложный объект, потому что его никак иначе не опишешь; а последовательность из миллиона единиц описывается очень короткой программой: "возьми миллион единиц"). Так вот, только очень простые, по Колмогорову, объекты выигрывают от передачи порождающей программы вместо самого объекта. Тем не менее и простой предмет может быть полезен, например географическая карта. Она описывается относительно небольшим набором точек, линий и текста, и если этот набор передать вместе с прикладушкой, генерирующей изображение на месте в нужном масштабе, получается действительно большой выигрыш. С полгода назад такая штука была на сети одна, а теперь поиск в Альта Висте на слово mapplet выдает кучу ссылок.

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

Третья (потенциальная) выгода от прикладушек заключается в том, что они могут снять часть нагрузки с сервера. Стандартный пример - проверка правильности заполнения формы. Скажем, если вы ввели дату, то месяц должен быть числом от 1 до 12, а в московском телефоне должно быть ровно 7 цифр. Если умная форма выловит такие ошибки еще в момент заполнения, то это сэкономит время на передачу неправильных данных серверу, его сообщения об ошибке, плюс немножко процессорного времени сервера, которое ему понадобилось бы на обнаружение ошибки и генерацию ответа. Негусто, впрочем. Действительно, тут опять вопрос сложности: если можно передать все данные клиенту, то это не очень сложные данные, а если данные сложные, то они все равно должны лежать на сервере, и задачу выбора подмножества, нужного клиенту, никак не переложишь на прикладушку.

Получается, что будь даже все авторы страниц грамотными программистами, непонятно, как бы это они смогли революционизировать Паутину с помощью Явы. Тут еще надо заметить, что эта гипотетическая революция не обязательно должна заключаться в поголовной "явизации" всех страниц, как введение стандарта CGI не привело к тому, что большинство страниц стали динамическими. Но динамические страницы есть и крайне полезны там, где уместны. А вот этого-то и не скажешь о Яве.

Но неужели так-таки ничего стоящего и не написано тысячами программистов? Я решил пойти на Гамелан и посмотреть, оценивая программы с точки зрения очерченных выше критериев: соотношения кода и данных и использует ли программа Паутину. Потому что иначе это "просто программа", которая могла бы распространяться на дискетах или через FTP. Какой бы интересной она ни была, но к революции она отношения не имеет.

Парад уродцев

Гамелан содержит не одну тысячу ссылок, и просмотреть их все занятому человеку, конечно, невозможно. Расскажу лишь о том, что я нашел только в одной категории - "Искусство и развлечения / Изящные искусства", содержащей 33 ссылки.

Почти все они работают. Некоторые никакого отношения к Яве не имеют (как, например, некая музыкальная сюита в формате MIDI), другие приводят на страницы с мультипликацией или навигационными устройствами, которые меня вовсе не интересуют. Вот, например, сверхклевая страница одного из голландских музеев предлагает стрелу времени, как навигационное устройство - выбираешь год, получаешь датированную этим годом картинку из коллекции музея. (Непонятно только, зачем это было делать вообще, и на Яве в частности.)

Из прочего заметнее всего разнообразные рисовалки. Например, генераторы случайных "мондрианок", один из которых я уже упоминал. Есть прикладушка, которая позволяет вам закрасить красной краской из баллончика Мону Лизу, причем сначала шипит, а потом уже красит. Две моделируют одну из наиболее идиотских рисовальных игрушек, какие я только знаю, - "etch-a-sketch", где у вас есть две поворотные ручки: одна перемещает перо по вертикали, а другая по горизонтали. Ничего хорошего нарисовать таким способом, конечно, невозможно (и опять же - зачем?).

Две следующие рисовалки заслуживают несколько большего внимания. Zap Paint может и сама рисовать, без вашей помощи. Она выводит как бы траекторию броуновской частицы, причем очень быстро. Но если вы начнете возить по экрану мышкой, эта броуновская частица как бы притягивается к курсору и продолжает бегать вокруг него - парадоксально, но чем медленнее двигать мышью, тем сильнее она притягивается. Опять же ничего хорошего так не нарисуешь, но, по крайней мере, эта программа имеет свое лицо. Результат ее работы значительно сложнее исходных данных (траектории мыши).

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

Я описываю все это так подробно, пожалуй, только для того, чтобы передать впечатление от среднего уровня представленных в Гамелане прикладушек (право, они не заслуживают более серьезного термина). Но кое-что поднимается над этим уровнем. Две из рисовалок помнят, что они сидят в Сети, и позволяют отправить готовую картинку на сервер, где ее могут посмотреть другие посетители. Одна, по идее, дает возможность коллективного творчества. Фактически, вам предлагается рисовать поверх нарисованного другими. Мне гораздо приятнее подход AnfyPaint, где вам предоставляют относительно мощную рисовалку, а готовые картинки поступают в виртуальную галерею и участвуют в конкурсе. Победителей в трех категориях (стиль, изобретательность и техника), объявляемых ежемесячно, стоит посмотреть.

Но есть программа, несколько выпадающая из общего ряда, зато точно попадающая в одну из обсуждавшихся выше категорий. Она предназначена для музыкантов, желающих публиковать ноты в Паутине. Можно, конечно, напечатать, отсканировать и повесить GIF, но это неэффективно. The Java Music Viewer умеет разворачивать файл специального формата, переданный с сервера, в графическую нотную запись на экране пользователя. Очень полезная штука (только для создания этого файла специального формата вам потребуется отдельная программа, которая еще недописана).

Две любопытные прикладушки, скорее из категории обучающих программ, демонстрируют принципы додекафонии и основы техники черно-белой фотографии.

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

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

Подождите, не ходите туда, пока я не объясню. Это такие существа, состоящие из двух глаз и трех многоугольников. Если нажать на кнопку "breed", вам дают нарисовать своего уродца, перетаскивая вершины многоугольников мышью с дают нарисовать своего уродца, перетаскивая вершины многоугольников мышью с места на место. Затем он поступает в "альбом", и когда вы его просматриваете, уродцы парадом проходят по экрану. Фокус в том, что они не просто двигаются, а именно проходят, переступая ногами, кивая головой (если есть) и моргая глазами, - чрезвычайно уморительно. Вот уж где результат работы программы на порядок сложнее исходных данных (пара десятков чисел, которыми описываются три многоугольника).

Выходит, и Яву можно все-таки употребить в Паутине с толком. И пусть примеров еще мало, пусть революция откладывается, а может быть, так никогда и не произойдет, но поискать стоит. Наверное, я этим займусь, если лихое племя сетевых обозревателей не бросится, прекратив междоусобные распри, освещать прикладушки.

Дмитрий Манин
manin@camelot.mssm.edu



">Дискуссия


Back Index Next