Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги хакеры / журнал хакер / специальные выпуски / Специальный выпуск 2_compressed

.pdf
Скачиваний:
15
Добавлен:
20.04.2024
Размер:
8.01 Mб
Скачать

X/WEB 0031 49

MILLENIUM

Как и у других таких редакторов, у этого тоже

мозгов ты ничего не сделаешь, но их уже на-

чаются достаточно компактными, хотя о ком-

есть один недостаток - не очень удобный ин-

до не так уж много.

пактности этих файлов мы поговорим позже.

терфейс. Фейс действительно неудобный, за-

Вообще-то, эта прога действительно замеча-

В проге реализованы основные VRML объекты:

то позволяет создать миры практически лю-

тельная. Она позволяет создавать даже аними-

конус, куб, цилиндр, сфера и круг, а также лам-

бой сложности и избавляет от главного ге-

рованные миры. Поддерживается экспорт в

почка Ильича. Хотя лампочка это не совсем

морроя блокнота - напрягать свои мозги. Хо-

VRML 2.0, compressed VRML2.0, JPEG è, êàê íè

объект, точнее объект, но не такой, как все ос-

тя мозги напрягать все равно придется, без

странно, даже в AVI. Сохраняемые файлы полу-

тальные, потому что ты ее не сможешь увидеть,

50

0032

X/WEB

 

 

 

 

 

 

 

 

 

 

MILLENIUM

 

www.3dsite.com/n/sites/

 

www.3dsite.com/n/sites/

 

она умеет только светить.

 

бутылку в монитор (полную кидать жалко). Я

Отдельно хочу отметить недостаток визуальных

 

Правда, что хреново, в RenderSoft VRML Editor

думаю, не имеет смысла засерать мозги свое-

VRML редакторов, они создают достаточно

 

очень неудобно реализован выбор объектов.

го компа такой громадиной тем, кто строит ми-

большой VRML код, очень часто вставляя туда

 

По умолчанию, мышкой ты двигаешь объект.

ры раз в год и то по пьянке.

лишнее. Этот недостаток касается и такого ги-

 

Для того, чтобы выбрать другую фигурку, ты

Ты еще не догадался, о чем я? Я о 3DS MAX. Да,

ганта, как 3DS MAX. Это общий недостаток ви-

 

должен щелкнуть по пимпе в панели инстру-

да, эта громадина поддерживает VRML файлы.

зуальности. Этим страдают и средства прог-

 

ментов и только потом по нужной фигурке.

Она спокойно открывает wrl файлы и потом без

раммирования, и HTML редакторы, и, и, и, ну,

 

Я бы назвал еще один недостаток, но он ка-

проблем запихивает свои сцены обратно. Для

короче, все кроме блокнота. Чем визуальнее

 

сается не всех прог такого класса, а только

этого необходимо только выбрать импорт или

программа, тем больше файлы она выдает.

 

этой - это небольшая глючность. Может быть,

экспорт в менюшке “Файл”.

Так, например, одна и та же сцена в 3DS MAX

 

это я глючил после очередной бутылки “Балти-

Эта прога не имеет недостатков предыдущих

займет больше места, чем в RenderSoft VRML

 

ки”, но иногда у меня возникали проблемы с

редакторов. Это очень удобная и гибкая прога.

Editor. Напоследок хочу посылать тебя на ... Ну,

 

пимпами на панельке. Когда я их нажимал, они

Я ее полюбил еще начиная с 3DS Studio. Если

в смысле на еще одну ссылку в Инете:

 

не всегда срабатывали с первого раза, прихо-

ты не помнишь, то эта та же прога, только под

http://www.tvi-sarl.fr/SetupVPLOT.exe.

 

дилось выключать и включать кнопку заново.

DOS. Dos - это такой Виндз, только без графи-

Это еще один маленький редактор VRML. Дос-

 

Этот глюк проявляется очень редко, поэтому я

ческого фейса. Графический интерфейс - это

таточно маленький и шустренький. Хотя не сов-

 

решил закрыть на него глаза, ширинку и, вооб-

глюк от МелкоМягких. Глюк - это то, что проис-

сем маленький, он занимает чуть больше 2 ме-

 

ще, я решил эту прогу закрыть - поехали даль-

ходит сейчас со мной. Бум.

гов. Он более удобный, чем прога от

 

øå.

 

У меня и сейчас на диске глючатся и 3DS MAX,

RenderSoft, и имеет чуть больше возможнос-

 

 

 

 

тей, но и весит в три раза больше.

 

 

 

 

Новое поколение выбирает... SEX,

 

 

 

 

SEX è åùå ðàç SEX

 

 

 

 

Да, новое поколение действительно выбирает

 

 

 

 

то самое, только некоторые его предпочитают

 

 

 

 

с девушками, а некоторые с Мастдаем.

 

 

 

 

Итак, что же выбрать из всего этого? Если у те-

 

 

 

 

бя полно места на диске и комп с легкостью тя-

 

 

 

 

нет 3DS Max, то устанавливай его. Слава чува-

 

 

 

 

ку, который там наверху, что мы живем в Рос-

 

 

 

 

сии, где легко можно достать эту прогу. Хотя ты

 

 

 

 

потратишь достаточно много времени на ее

 

 

 

 

изучение, но миры у тебя будут убойными, и

 

 

 

 

любого посетителя твоей странички разорвет в

 

 

 

 

клочья.

 

 

 

 

Если ты хочешь быстро создать компактный

 

 

 

 

код, то тебе прямая дорога к RenderSoft. Эта

 

 

 

 

прога достаточно проста и позволит тебе соз-

 

 

 

 

дать хороший мирок. Конечно, чтоб создать та-

 

 

 

 

кой мир, как в 3DS MAX, тебе понадобится нем-

 

Самый лучший редактор номер 3

и 3D Studio, правда, я их очень редко запускаю.

ного больше времени и нервов, но вполне

 

 

 

Все возможности этой проги на двух полосках

реально.

 

Это действительно самый лучший редактор. Он

журнала перечислить просто невозможно. Если

Ну а блокнот предназначен для самых извра-

 

позволяет практически все. Единственный его

ты еще не знаешь такой проги, то быстрей нап-

щенных.

 

недостаток - это его тяжеловесность. Он доста-

равляйся на ближайший рынок, там обязатель-

Все, я закругляюсь. А то к спору с двумя мои-

 

точно много места занимает на диске и очень

но будет валяться диск с “3DS MAX + русский

ми “я” скоро присоединится еще и редактор Х.

 

прожорлив к ресурсам, хотя на моем сотом пне

учебник”. А я пожалею место журнала, а то мне

Он нам на троих выделил только две полосы, а

 

с 32 мегами мозгов он достаточно сносно ра-

редактор кое-что укоротит, если я начну хва-

мы тут уже наклепали хрен знает сколько. Ну, в

 

ботал. Достаточно сносно - это не значит, что

лить все возможности этой проги.

смысле, от этого больно бывает.

 

достаточно хорошо. Это значит, что можно по-

 

Все. Удачи тебе. Best regards. Бай. Пока. До но-

 

терпеть, хотя иногда хочется запустить пустую

Конец - телу венец

вых встреч.

X/WEB

0033 51

MILLENIUM

3dsite/cgi/VRML-index.html 3dsite/cgi/VRML-index.html

www1www1.cybertown.cyberto.com .com

52

0034

X/WEB

 

 

MILLENIUM

FLASH4 ЗА 15 МИНУТ!

MOOF (MOOF@xakep.ru ; http://anynews.agava.ru)

Ты только представь: заходишь ты на страницу - и она оживает. Бред? А вот и нет. Ты когда-нибудь слышал такое словосочетание Macromedia Flash 4? Ты думаешь, что flash - это марка макарон? Тогда, скажу откровенно, тебе не очень понадобится этот материал - лучше макаронами займись. ;) Если ты все еще читаешь это, то тебе стоит включить комп и проделать все действия, которые я буду описывать. Для этого у тебя должен быть установлен сам пакет Macromedia Flash 4 (или 3). Весит это “счастье” всего 9Мб с хвостиком. Если его у тебя нет, то пойди и купи CD с ним или скачай из Инета 30-дневную версию (http://www.macromedia.com).

Зачем мне это нужно?

Àза тем, что с помощью флэша ты можешь создавать крутые фичи вWYSIWYG (ч¸ видишь, то и полу-

чишь) редакторе. Тебе теперь не надо учить заумные языки программирования - с флэшем ты можешь сделать практи- чески все что захочешь, зная лишь 10-15 команд. Но, даже не зная их, ты сможешь делать классную анимацию, стильные эффекты и прочее благолепие. ;) А анимацию делать во флэше не просто, а очень просто! Все, что от тебя требуется - это сделать первый и последний кадры. Все остальное на себя берет флэш.

Let’s rock!

Ну, давай, наконец, чего-нибудь сделаем. На- чинаем, как всегда, с File->New. Перед тобой окно редактора!

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

На панели инструментов жмем на кнопочку с буквой “А”. И кликаем на листе. В появившемся поле ввода пишем большими буквами (размера 72) и шрифтом Times слово “ХАКЕР”. Делаем его ярко-зеленым (я думаю, ты сам справишься с этой задачей?). Надпись готова! Не забудь сохраниться. ;) Теперь на линейке с кадрами выбери сороковой кадр и жми F6. Это ты создал сорок кадров с твоей надписью. Выбери первый

кадр и подвинь надпись к левому верхнему краю, а потом выбери последний кадр и подвинь надпись к правому верхнему краю. Как, справляешься? Теперь выбери слой (Layer), на котором у тебя находятся картинки, и выбери Insert -> Create Motion Tween. Все! Анимация готова. Ты создал первый в своей жизни флэш ролик. Поздравляю! Чтобы посмотреть его, достаточно просто нажать на ентер, а если захочется взглянуть в браузере - просто нажать F12. Теперь давай малость улуч- шим ентот ролик. Жмем Modify -> Movie, где Background меняем цвет на черный, а fps на 10. Высоту (height) тоже поменяем, на 100. Чтобы движение прошло раз и остановилось, кликаем правой кнопкой мыши на последнем кадре, в появившемся меню выбираем Properties, т.е. свойства. В появившемся окне выбираем вкладку Action и кликаем на плюсик, и выбираем Stop.

Вкладка Action служит для программирования свойств, которые невозможно сотворить визуально (типа посылка письма или вызов cgi скрипта). Теперь сделаем, чтобы текст постепенно появлялся из темноты. Жмем правой кнопкой мыши на надписи, предварительно установив фокус на первый кадр, выбираем Properties. Затем переходим на последнюю вкладку Color Effect. Там выбираем Brightness, т.е. меняем яркость текста до -100%. Сохраняемся, жмем F12 и наслаждаемся зрелищем. Можно еще извратиться и сделать, чтобы надпись вращалась при перемещении. Жмем на первом кадре правым батоном мыши и в свойствах выбираем вкладку Tweening. Там в меню Rotate выбираем способ вращения: по часовой стрелки или против и устанавливаем количество поворотов (times), например, три. Ентер. ;) Как ты заметил, надпись

X/WEB

0035

53

MILLENIUM

 

 

<OBJECT classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000” codebase=”http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0” ID=Movie1 WIDTH=550 HEIGHT=100>

<PARAM NAME=movie VALUE=”Movie1.swf”> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#000000>

<EMBED src=”Movie1.swf” quality=high bgcolor=#000000 WIDTH=550 HEIGHT=100 TYPE=”application/x-shockwave-flash” PLUGINSPAGE=”http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash”> </EMBED></OBJECT>

стала вылезать за размеры листа, имхо, так кру- че смотрится, но если тебе не нравится, то можешь увеличить лист. Как, смотри выше.

Навороты

Смотри, за пару минут мы с тобой научились делать анимацию, ну что может быть проще,

чем флэш? Теперь подумаем, куда можно его впихнуть? Я думаю, идеальным вариантом было бы впихивание этого добра в стартовую страницу (в какойнибудь index.html). Как? При сохранении флэш создает несколько файлов с расширениями: fla, swf и html. Файл с расширением fla используется редактором для хранения всей необходимой информации. Файл с расширением swf

предназначен для плеера флэш файлов. А html файл предназначен, как ты понимаешь, для эксплорера, чтобы он смог загружать swf файлы и проигрывать их. И для того, чтобы вставить флэш анимацию (или еще чего), надо взять кусок кода из html файла и вставить его туда, куда тебе надо. Вот пример кода:

54

0036

X/WEB

 

 

 

 

 

 

 

 

 

 

MILLENIUM

 

Теперь вернемся к нашим баранам. Сделаем,

рованный звук. В меню Sync выбираем

все кадры к Биллу Г. Для этого кликаешь по

 

чтобы после завершения анимации в окне

Stream и количество повторений. При жела-

слою Button (выделяются все кадры) и жмешь

 

браузера открывался сайт нашего журнала.

нии можно запустить звук не с самого начала,

shift+F5. Готово, этой ужасной кнопки больше

 

Для этого открываем окно свойств на послед-

а в середине ролика (к примеру).

нет. Выбираешь первый кадр, жмешь F5. Соз-

 

нем кадре, выбираем вкладку Action и поле

 

дается новый кадр. Там рисуем овальную

 

команды stop, которую мы добавили чуть

INDEX

кнопку (например, зеленым цветом с темно-

 

раньше, добавляем команду GetURL. В строке

зеленым контуром). Для этого на панели с ин-

 

URL указываем адрес сайта: http://www.

 

струментами выбираешь инструмент с круж-

 

xakep.ru, в поле window выбираем “_top”,

Побаловались и хватит, займемся делом.

ком и устанавливаешь необходимые парамет-

 

что означает, что новая страница будет от-

Давай сделаем нормальную стартовую стра-

ры. На кнопочке напишем крупно “WAREZ”.

 

крываться в этом же окне. Теперь по завер-

ничку с меню и анимацией. File -> New. Ус-

Теперь выбери кадр Over и нажми F6. У тебя

 

шении анимации будет автоматически загру-

танавливаем размеры 640х480 и черный цвет

появится та же кнопочка. Ты можешь изме-

 

жаться сайт Хакера.

 

ôîíà.

нить ее цвет, используя заливку (такое ведро,

 

Теперь добавим туда парочку картинок. Для

Начнем с заголовка. Напишем сверху белым:

из которого что-то подозрительно льется).

 

картинки создадим новый слой insert ->

“ЛУЧШИЙ ВАРЕЗ В МИРЕ”. Установим его

Зальем желтым цветом. И точно так же созда-

 

Layer. Делаем его активным и добавляем кар-

размер равным 48 и шрифтом Courier. Если

дим кнопочку для события Down, но сделаем

 

тинку File -> Import. Двигаешь картинку в пра-

захочешь, то можешь добавить анимацию.

ее синего цвета. Переключаемся в режим ре-

 

вую сторону и запускаешь ролик. Видишь,

Теперь создадим кнопки для выбора страни-

дактирования. Открываем свойства первой

 

картинка осталась на месте. Теперь заставим

цы, которую будем загружать. Выбираешь

кнопки. Переходим на вкладку Definition, в

 

ее увеличиваться. Как и в случае с текстом,

Library -> Forms-Windows Controls, появляет-

списке объектов есть и наша кнопка: Push

 

выделяем сороковой кадр, жмем F6. Потом

ся окно, в котором мы можем выбрать раз-

Button. Кликни на ней правой кнопкой и выбе-

 

выделяем весь слой и создаем анимацию

личные элементы управления: различные

ри Duplicate Symbol, создается копия объекта

(Insert -> Create Motion Tween). В первом кад-

кнопки и переключатели. Выбираем Push

«кнопка». Создай две копии кнопки. Теперь в

ре уменьшаем размеры картинки. Это делает-

Button и перетаскиваем ее на лист. Простым

свойствах каждой кнопки установим различ-

ся клавишей Scale, которая находится слева.

перетаскиванием сделаем три кнопки. Теперь

ные объекты. Для этого достаточно сделать

А в последнем кадре, наоборот, увеличи-

можешь закрыть маленькое окошечко с ком-

дабл-клик на нужном объекте.

ваешь размер картинки. Запускаем. Видишь,

понентами, оно пока нам не нужно. Сейчас

 

все работает.

это обычные серенькие кнопки, и на них вез-

Отредактируем вторую и третью кнопки. Изменим

Для полного кайфа добавим звук. Для этого

де написано ОК, это надо исправить. Кликаем

их цвет и надписи. Добавим звук при наведении

создадим еще один слой, который будет от-

правой кнопкой крысы на только что создан-

на кнопку. Для этого импортируем звуковой файл

вечать за звук. Вообще, слои - отличная шту-

ной кнопочке и во всплывающем меню выби-

(Control+R) и откроем редактирование кнопки.

ка, когда тебе надо много объектов заставить

раем «редактировать» (Edit). Опа! Сверху

Жмем правой кнопкой на [Over] кадр и открываем

двигаться. Выбираем файл из меню File ->

вместо кадров появилось четыре положения

его свойства. Там на вкладке Sound устанавли-

Import. Затем открываем свойства первого

кнопки: отжата (up), нажата (down), наведена

ваем звук, который будет проигрываться при на-

кадра нового слоя и в его свойствах, во

мышь (over) и кликнута (hit). Переделаем

ведение курсора на кнопку. При желании можно

вкладке Sound выбираем только что импорти-

кнопку по своему вкусу. Для начала удалим

установить свой звук для каждой кнопки.

X/WEB

0037 55

MILLENIUM

Теперь сделаем, чтобы при клике на кнопку

 

 

 

открывалась нужная нам страница. Для этого

 

 

 

открываем свойства кнопки и во вкладке

 

 

 

Action устанавливаем уже знакомую тебе ко-

 

 

 

манду GetURL. Однако теперь надо отредак-

 

 

 

тировать и команду On(), которая отвечает за

 

 

 

действия, после которых будет выполняться

 

 

 

команда GetURL. Для этого выбираем коман-

 

 

 

ду On() и справа в свойствах события выстав-

 

 

 

ляем вместо Release действие Press. Теперь

 

 

 

при клике на кнопку будет открываться нуж-

 

Полезные ссылки

 

ная нам страничка. Проделаем то же и с ос-

Control+Shift+F12. В открывшемся окне есть

 

тальными кнопками.

три вкладки: Formats, Flash и HTML. В первой

 

 

Теперь заставим объект двигаться по зара-

вкладке ты можешь задать форматы, в кото-

http://www.macromedia.com

-

нее созданной траектории. Добавь еще один

рых будет создаваться результирующий ро-

сайт компании разработчика флэша.

 

слой. На нем нарисуй красный круг, именно

лик. На следующей вкладке Flash устанавли-

 

 

он и будет двигаться. Если тебе не нравятся

ваются параметры флэша. В каком формате

http://www.flasher.ru

-

круги, можешь нарисовать квадрат или доба-

(флэш 1,2,3 или 4) сохранять файлы, качество

русскоязычный сайт о флэше.

 

вить картинку. В меню Insert выберем Motion

jpg сжатия и т.д. А на вкладке HTML настраи-

 

 

Guide. Появится новый слой, на котором ка-

ваешь параметры, которые будут передавать-

http://www.flasher.net;

 

рандашом нарисуем траекторию “полета”

ся флэш плееру из html файла.

http://www.flashzone.com;

 

круга. Выделим первый кадр на слое с кру-

 

http://www.shockrave.com - посмотри сам.

 

гом и создадим анимацию (Insert -> Create

 

 

 

 

 

 

 

Motion Tween). Теперь надо включить инстру-

The end

 

 

 

 

 

мент магнит (Snap) и перетащить круг, держа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

его за центр, в начало линии анимации. А в

 

 

 

Ýòî,

 

конечно,

далеко не все, что можно сде-

 

 

 

последнем кадре перетащим круг в конец ли-

 

 

 

ëàòü

ñ

флэшем, но лучше, чем ничего. ;)

 

 

 

 

 

 

 

íèè. F12.

 

 

 

Сейчас

все большую популярность набирают

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ôëýø

баннеры размером 468х60. Если ты

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дочитал

эту статью до конца, то можешь уже

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Настройки

 

 

 

 

 

 

смело садиться и делать баннер на флэше.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CRT будет убойным, поверь мне. Обязатель-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Кроме роликов для Интернета, с помощью

но побывай на сайтах, указанных ниже, там

 

 

 

 

 

 

 

флэша можно создавать красивые интерак-

ты найдешь много полезной информации и,

 

 

 

тивные презентации. Ты, наверное, видел та-

 

 

возможно, в скором времени ты создашь

 

 

 

 

 

 

 

кие на халявных дисках, которые заказываешь

свой супер революционный проект во

 

 

 

 

 

 

 

в сети. Все это можно настроить, нажав

флэше.

 

 

 

56

0038

X/WEB

 

 

 

 

MILLENIUM

Ява Золотая: история с географией

Radagast Kary

Дядь, дай десять копеек!

Íу, чего смотришь? Думаешь, так сразу и расскажу про Яваскрипт и про то, как им можно винты довер- чивым усерам хакать? А фиг тебе,

послушай сначала сказку про белого бычка. Че- го мычишь - недоволен? А что, ты и без меня знаешь, откуда произошел JavaScript, почему он именно так называется, кто его предки... Ы? Ну так и сиди тихо - ручки на коленках - и слушай знающих людей (вроде меня).

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

Пока что посмотрим, что же случилось с этой концепцией дальше.

Никто не знает, что заставило коллектив компании Сунь Микросистемз, которому было поручено создание нового языка, обратить свой извращенный взгляд на Си. Может, они считали, что идея насчет языка программирования среднего уровня осуществилась? Я лично не знаю. Если хочешь, можешь спросить об этом прямо у них, но предупреждаю: они очень странные люди и ни слова не понимают по-рус- ски!!

Но, так или иначе, была директива от начальства: создать новый сиподобный объектноориентированный простой в разработке и обращении машинонезависимый язык. Тоже нехило, да? Но директива от начальства - это

серьезно, на это нельзя просто так наплевать и усесться дальше играть в Диаблу. Точнее, можно, но только так, чтобы это не было заметно. На этот раз дело двигалось гораздо более шустро и без заметных напрягов. Ну, “новый сиподобный” - это понятно, берем Си и вешаем всех необходимых нам собак на него. “Объек- тно-ориентированный” - смотрим на сишную (точнее будет сказать сиплюсплюсную (или сиплюсплюснутую?) реализацию всяких там инкапсуляций-интерполяций, полиморфизмовантропоморфизмов и наследования. Простого такого наследования. Так, значит, смотрим на них и добавляем то, чего там по нашему мнению не хватает и чему там по нашему мнению самое место. Так, что там дальше... Ага, “простой”. Элементарно, Ватком! Там же не сказано, что язык должен быть чем-то большим, чем просто объектно-ориентированное фуфло. Так что берем и смело обрезаем (а правильнее сказать, коцаем) все, не связанное с объектной ориентацией. Если что связано, но не очень крепко - дергаем, отрываем и только потом коцаем.

“Машинонезависимый”... Кхм... Это несколько сложней. Хотя все равно решаемо. Пока комп тормозит, помогая Диабле перейти на новый уровень, придумываем некую виртуальную машину (Николас Вирт тут не при чем, равно как

èавтомагазин в Интернете). Виртуальная машина - это такая фигня, которая дико тормозит

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

Прекрасно! Можем себя поздравить - монстер готов. Прямо хоть из печки да и сразу в Бестиарий. Ан нет - надо еще раскрутить хорошенько, попродавать немного, а там хоть трава на лысине не расти!

Умереть труднее, чем кажется

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

лись и решили разработать новый язык, при- чем действительно простенький, маленький и по нормальному машинонезависимый, к тому же удобный для использования его при работе в Интернет (совместно с HTML). Как это ни странно, плясать они начали именно от такого сокровища, как Ява. От глобальной объектизации, конечно, отказались сразу, хотя ее ростки приходится выкорчевывать до сих пор.

Итак, всем стало ясно, что фирма Нетшкаф на базе сановой Явы сделала новый лангваг. Кому не ясно - читай сначала или спать ложись, поздно уже, в конце-то концов! А остальным не мешай.

JavaScript и Java - близнецы-братья?

Прежде всего перестань тормозить и пойми, наконец, что JavaScript и Java - это совершенно разные вещи. Java представляет собой объектно-ориентированный язык программирования от компании Sun Microsystems и требующий для нормального безглючного функционирования компиляторов и кучи отдельных вспомогательных файлов. Этот язык хорош только для тех, кого не тошнит от Си++ и кто безумно помешан на объектно-ориентирован- ном принципе программирования.

Особая приблуда под названием Java Development Kit позволяет (вынуждает) :) создавать программы, которые могут работать как отдельные вполне законченные проекты или же как апплеты, подключенные к HTML-страничке. Именно подключенные, так как каждый апплет должен храниться на сервере в своем отдельном файле в своем хитровыдуманном формате. JavaScript был разработан в Netscape. Он близок к Яве по трем причинам:

1)По названию

2)По некоторому общему простому набору команд, сходных в реализации (ну родственники, ¸ëû-ïàëû!)

3)По зарезервированным словам.

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

X/WEB

0039 57

MILLENIUM

2.0 ... 5.0 или маздайного мелкомягкого Интер-

которых других простейших действий с ними. В

return g;

 

нет Ыгплорера 3.0 ... 5.0.

 

языке JavaScript существуют три праобъекта,

};

 

Несмотря на отсутствие прямой связи с Явны-

от которых происходят все остальные.

 

var g=new Array(l.length+1),i;

ми фенечками, ЯваСкрипт вполне может обра-

 

Global - содержит только то, что в нор-

for(i=0;i<l.length;i++)

щаться к внешним свойствам и методам Ява-

мальных (не объектно-ориентированных) язы-

{

 

апплетов, встроенных в страницу HTML. Итого,

ках называется глобальными переменными.

 

// в этом примере массив двумерный, но

разница сводится, на первый взгляд, только к

Math - содержит большую кучу матема-

// может быть

тому, что Java-скрипты лежат внутри исполь-

тических функций типа синусов-косинусов и

// и по-другому. Фантазируйте!

зующего их файла HTML, тогда как Java-прог-

всех возможных вариантов округления. Они

g[i]=new Array(2);

раммы существуют вовне. Теперь же рассмот-

выделены в отдельный класс (объект) только

g[i][0]=l[i][0];

рим более детально особенности JavaScript’а.

потому, что их много.

 

 

g[i][1]=l[i][1];

 

 

 

Эти два класса объединяет одно: объект

}

 

Понятие бестиповости

 

(экземпляр класса) может быть только один на

g[l.length]=new Array(2);

 

 

 

всех. Почему - я думаю ясно. Не может же быть

return g;

 

JavaScript является исконно бестиповым язы-

несколько разных синусов? Синус - он и в Аф-

}

 

ком программирования. Эта заумная фраза оз-

рике синус...

 

 

 

 

 

начает, что пользователю (точнее, програм-

Object - это уже предок основного коли-

Boolean - очень малозначный (как и положе-

мисту - разработчику программного обеспече-

чества встроенных классов (точнее, всех, кро-

но) булев тип. Тrue означает правду, false -

ния на этом языке) все равно, данные какого

ме вышеперечисленных). Ничего в себе нового

ложь. Вообще-то, JavaScript - язык бестипо-

типа лежат в каждой конкретной переменной:

не содержит, но хранится как почетный отец-

вый, как будет отмечено ниже, но полезно

строки, восьмимерные массивы,

объекты,

основатель.

 

 

 

знать, что при умышленном конвертировании

числа вещественные или целочисленные и

 

Но, понятное дело, это еще не все. Те-

true переходит в ‘true’ строковое или 1 число-

так далее до исчерпания фантазии програм-

перь мы с тобой рассмотрим еще шесть потом-

вое, false - в ‘false’ или 0 соответственно. При

мера. Именно поэтому в сях переменную

ков Object, которыми так или иначе пользуются

конвертировании в Boolean любое не нулевое

объявляют так:

 

JavaScript-программисты.

 

 

значение перейдет в true.

char f=’f’;

 

 

Array - массив. Инициализируется так:

Date - немного напоминающий и Global, и

int b=0xB;

 

var mycoolArray=new Array(2);

 

Object. Как константа только для чтения сущес-

unsigned long double pee=3.14;

var yourcoolArray=new Array(2,3,4);

 

твует объект Date. И такой же (только малень-

а в Яваскрипте - так:

 

var ourcoolArray=new Array(new Array(2),

кий и неизменный) объект может быть создан в

var f=’f’;

 

new Array(4,5));

 

 

любом месте твоего скрипта. Как типовую за-

var b=134341;

 

В вышеприведенных примерах в первом случае

дачку можно рассмотреть создание часов в

var pee=3.14;

 

создается одномерный массив размера 2 (раз-

статусной строке (это внизу бравзера есть та-

Усек? И при этом тебе теоретически должно

ìåð

массива

всегда

доступен

ïî

кая фигня).

 

быть ярко фиолетово, как именно пишутся твои

arrayName.length), во втором

 

 

 

 

числа - в кавычечках или без оных. Но это ведь

случае - тоже одномерный, но

<HTML>

 

 

 

только теория... Постарайся сконцентрировать

длины 3 и заполненный не ну-

<HEAD>

 

 

 

свою силу воли до такой безумной степени, ко-

лями, а вполне определенны-

<SCRIPT>

 

 

торая позволит тебе не заснуть окончательно

ми циферками. Третий при-

// Функцию надо вызывать только один раз.

до конца страницы, и тогда бескрайнее море

мер комбинирует два преды-

function display_time_in_status_line()

информации обогатит твою бессмертную душу

дущих,

создавая

двумерный

{

 

 

 

неувядающей

мудростью и осознанием этой

массив.

 

var d = new Date();

// который час?

разницы. Учись, пока я жив.

 

В виде завершения могу при-

var h = d.getHours();

// ÷àñ îò 0 äî 23

 

var m = d.getMinutes();

// минуты от 0 до 59

 

 

 

вести

процедуру

увеличения

 

 

 

var ampm = (h >= 12)?”PM”:”AM”; // AM èëè PM?

 

 

 

размерности массива на

 

 

 

if (h > 12) h -= 12;

// нам нужно только первые 12

Объекты и их иерархия

 

один. Хорошая вещь, исполь-

 

if (h == 0) h = 12;

// полночь

 

 

 

зованная мною

не в одном

 

 

 

if (m < 10) m = “0” + m;

// добавить нулей

Основное понятие JavaScript - объект, но пони-

скрипте.

 

 

var t = h + ‘:’ + m + ‘ ‘ + ampm; // пусть лежат вместе

мается это не так, как в Яве. Вообще, что такое

 

 

 

defaultStatus = t;

// îíî!!!

‘Объект’, знаешь? Это что-то типа сумки, в ко-

function incDim(l)

setTimeout(“display_time_in_status_line()”, 60000);

торую можно сложить сразу и дискету, и книж-

{

 

 

// делать ту же гадость каждую минуту

ку, и даже собственную ногу (но только одну!)

if (l==’nil’)

 

}

 

 

 

:) И при этом помнить, что в сумке есть все

{

 

 

</SCRIPT>

 

 

 

 

</HEAD>

 

 

 

необходимые

инструменты для

вынима-

var g=new Array(1);

 

 

 

<BODY onLoad=”display_time_in_status_line();”>

ния/вкладывания вещей и для реализации не-

g[0]=new Array(2);

<!— Здесь лежит очень большой и страшный HTML документ —> </BODY>

</HTML>

58

003A

X/WEB

 

 

MILLENIUM

Function - немного извращенный метод

рассмотрю только несколько из них, так как

appName (мирское имя его же), appVersion

 

почти все в браузерах представляется с по-

(версия проги), userAgent

 

 

использования функции. Обычная функция

мощью них.

 

 

 

 

 

 

 

 

 

(appCodeName+’/’+appVersion (чтобы по три

 

выглядит так:

document. Именно

òàê,

ñ

маленькой

буквы.

раза одно и то же не спрашивать), javaEnabled

 

function mycoolfunction(f)

 

Привыкай, в JavaScript все имена, кроме Самых

(а можно ли?), cookieEnabled (или все-таки

 

{

 

Главных Объектов, традиционно пишутся с ма-

нельзя?), plugins (архив плюгинов), mimeTypes

 

alert(f++);

 

ленькой буквы. Причем, интересный момент:

(он же, но типов мимекодирования). Некото-

 

return --f;

 

если название состоит из нескольких слов, то

рые, особенно пальценутые браузеры, имеют

 

}

 

второе слово и дальше пишутся с большой, то

только свои свойства этого объекта:

 

 

 

а извращенная форма будет так:

åñòü var book, author; íî var myCoolBook,

taintEnabled â Netscape, browserLanguage,

 

var mycoolvar=new Function(“f”,”alert(f++);return —f;”);

authorOfThisVeryGoodDocument;

 

 

connectionSpeed, cpuClass, onLine, platform,

 

и вызываться она будет как

Этот объект - самый толстый из всех, он содер-

systemLanguage, userLanguage в MSIE. Размер

 

var g=4;

жит во-первых, массив all, в котором, как ты

пальцев легко сравнивается количеством этих

 

myvoolvar(g);

уже, наверное, догадался, лежит все, что есть в

никому не нужных свойств.

 

 

Класс, а? На первый взгляд немного дико, но

 

 

документе, и во-вторых, то же самое, но отсор-

Так, не засыпай! Я еще не сказал, что, во-пер-

 

архиудобно для работы с динамически созда-

 

тированное

ïî

разным

критериям. К

таким

вых, если юзер, который любуется твоей стра-

 

ваемыми функциями.

 

массивам относятся anchors, applets, embeds,

ничкой, делает это в МСИЕ, то ты можешь по-

 

Number - используется в основном для преоб-

 

filters, images,

links,

plugins,

scripts, selection,

лучить

очень много информации

из объекта

 

разований. Ну кто в здравом уме будет писать

 

styleSheets. Подробную инфу по ним можно

navigator или даже запустить программу на

 

var g=new Number(3); если можно довольство-

 

ваться var g=3;? Но при этом очень удобно ис-

найти в умных книжках или доках. Тут уж, как

VBScript. Во-вторых, вот маленький полезный

 

пользовать это для приведения к другому типу,

говорится, ‘читайте доки - они рулез’. Или, как

примерчик:

 

 

 

например, так:

говорит один

ìîé

хороший

 

 

 

 

 

 

 

var g=”3”;

знакомый,

‘âåê

æèâè,

âåê

function isNormalBrowser

 

 

 

var h=Number(g);

RTFM, все равно LMD’. Не об-

 

 

 

{

 

 

 

 

 

 

var j=g+h;

 

 

 

 

 

 

ращай внимания,

ýòî

ÿ

òàê

 

 

 

 

 

 

if (navigator.appName.indexOf(‘Microsoft’)==-1) return true;

var l=h+g;

смешно шучу. Гы-гы-гы.

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Там же можно при желании

 

 

 

 

 

 

 

Думаете, после выполнения этого всего j будет

найти свойства activeElement,

function whatOS

 

 

 

 

равно l? А вот и фиг. В j будет лежать “33”,

readyState,

referrer

и методы

{

 

 

 

 

 

 

тогда как в l - 6. Вот такие вот пирожки. С ко-

open, write, writeln, close, clear,

if (navigator.appVersion.indexOf(‘Win’)>=0) return ‘MustDie’;

if (navigator.appVersion.indexOf(‘UNIX’)>=0) return ‘*NIX’;

тятами.

c r e a t e E

l e

m e

n

t

,

if (navigator.appVersion.indexOf(‘BSD’)>=0) return ‘FreeBSD’;

String - строчка. Записывается в одинарных

e l e m e n t F r o m P o i n t ,

if (navigator.appVersion.indexOf(‘Linux’)>=0) return ‘Linux’;

или двойных кавычках, но не сразу. Например,

e x e c C

o

m

m a

n

d

,

if (navigator.appVersion.indexOf(‘Sun’)==0) return ‘SunOS’;

тебе кровь из носу надо, чтобы строковая пере-

q u e r y C o m m a n d E n a b l e d ,

//добавляй еще, какие знаешь...

 

 

 

менная содержала такую строчку: ‘*”&’%”#.

 

 

 

q u e r y C o m m a n d I n d e t e r m ,

 

 

 

return ‘Unknown’;

 

 

 

 

Думаешь, это невозможно? Как бы не так! На

 

 

 

 

q u e r y C o m m a n d S t a t e ,

}

 

 

 

 

 

 

JavaScript возможно все...

 

 

 

 

 

 

queryCommandSupported

 

è

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

var mycoolstring=”’”+’*”&’+”’%”+’”#’;

queryCommandText. Имена

ó

 

 

 

 

 

 

 

Все ясно? Можешь отхлебнуть еще пивка и чи-

всех методов и свойств говорящие, так что

Даже не знаю, надо ли тебе говорить, насколь-

 

тай дальше...

должно быть все понятно. Я сказал должно!

ко важно знание операционки в разных благоп-

 

В общем, String - класс с абсолютно аналогич-

Позволю себе только отметить, что

риятных случаях... Не, не скажу! :)

 

 

ным Number и полностью идентичным исполь-

document.referrer содержит адрес документа, с

 

 

 

 

 

зованием. Только вот работает он совсем в

которого был совершен переход на текущую

Reserved Words

 

 

 

другую сторону. Но - работает. За что ему и

страничку. Сечешь, хакер?

 

 

 

 

 

 

 

 

 

спасибо.

window. Содержит свойства parent, self, top,

Зарезервированные слова в JavaScript делятся

 

 

name,opener,

closed,

status,

defaultStatus,

на два типа: нормальные и зарезервированные

 

 

returnValue,

clientInformation,

document,

event,

на будущее. В первую категорию входят те сло-

 

Маленькие объекты - большие достоинства

history, location, navigator, screen, event. Êàê

ва, которые реально используются как зарезер-

 

 

начнешь работать с HTML/JS ближе (если уже

вированные в цивилизованных языках. Во вто-

 

Кроме девяти вышеперечисленных классов, в

ни начал), разузнаешь все, что следует, про

рую - те, что, может быть, когда-нибудь и будут

 

JavaScript есть еще несколько маленьких, но

каждый из них.

 

 

 

 

 

 

 

 

использованы, а пока что они являются заре-

 

чрезвычайно важных, полезных и интересных

Еще объект window содержит такие полезные

зервированными в Яве и скорее всего никогда

 

объектов, которые невозможно причислить ни

методы, как open, showHelp, execScript,

не войдут в JavaScript. Во всяком случае, я на

 

к одному из уже известных тебе классов. Пони-

setTimeOut,

 

clearTimeOut,

setInterval,

это надеюсь.

 

 

 

мание этого дела сильно осложняется еще тем

clearInteral,

close,

showModalDialog,

alert,

Вот следующие слова из первой группы:

 

фактом, что во многих умных книжках классы

prompt, confirm, navigate, blur, focus, scroll è

break

false

in

this

void

называются объектами (собственно, как и сами

другие...

 

 

 

 

 

 

 

 

 

объекты.) Это вносит путаницу в и без того

navigator. Содержит кучу переменных, среди

continue

for

new

true

while

странный и пугающий для новичка мир объек-

которых следует упомянуть appCodeName (ко-

delete

function

null

typeof

with

тно-ориентированного программирования. Я

довое супер-пупер секретное имя браузера),

else

if

return

var

 

А вот - из второй:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

case

debugger

export

super

 

 

 

 

 

 

 

 

 

 

 

 

catch

default

extends

switch

 

 

 

 

 

 

 

 

 

 

 

 

class

do

finally

throw

 

 

 

 

 

 

 

 

 

 

 

 

const

enum

import

try