Следующая новость
Предыдущая новость

Анатомия и физиология HyperCard

20.05.2018 22:07
Анатомия и физиология HyperCard

Не уверен, что кого-то интересует, как был устроен HyperCard. Но не написать об этом не могу. Что-то из серии “Вы хотите поговорить об этом?”.

Продолжение, предыдущая часть здесь, начало тут.

Концептуальная основа HyperCard – стопка карточек, с графикой и текстом, с элементами управления и… связь между мирами, разделенными сотнями световых лет.

На самом деле HyperCard намного интереснее, чем звезды и межзвездные пространства. О чем Сириусу говорить с Бетельгейзе?

Элементы “машинки” HyperCard

В чем все-таки секрет притягательной силы HyperCard, ведь им “заболело” множество людей. Что-то в нем было такое, психоделическое и трансцендентное?

Попробуем разобраться. Поверим алгеброй гармонию, так сказать.

HyperCard – это “конструктор для создания приложений”. Такое виртуальное лего. Состоит он из очень небольшого набора тиражируемых пользователем элементов (это стэки, фоны, карточки, поля и кнопки) и небольшого же набора инструментов (несколько специальных стэков, экран Recent и Message Box).

Тиражируемые элементы

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

Стэк (stack) – это одновременно единица файловой системы, документ HyperCard, файл с типом ‘STAK’ и кодом создателя ‘WILD’, и область обитания всех остальных тиражируемых элементов. Вне стэка они не существовали. У HyperCard тип был, естественно, ‘APPL’, а код создателя, которым он и был – такой же, как у повелеваемых им документов, ‘WILD’.

Возникает вопрос: а почему не ‘HYPE’? Что за дикость (“wild” по английски “дикий”)? Ответ на этот вопрос — в конце статьи.

Стэки бывали очень разными по размеру и полезности. Все приложения, создаваемые в HyperCard (стэквер), были именно стэками. В их числе — такие как Myst компании Broderbønd, Focal Point и Business Class Дэнни Гудмана, прообраз wiki от Говарда Каннингема – к 2004 году существовали сотни тысяч более чем приличных программ, которые были всего лишь стэками.

В HyperCard 2.2 появилась возможность превращения стэка в автономное приложение, что еще больше приблизило разработку стэков к промышленному программированию, правда, лишив всех остальных возможности разобрать чужую программу и посмотреть, в деталях, как она устроена. Чем-то всегда приходится жертвовать.

Фон (background) – это объединение нескольких карточек (любого их числа) и, кроме того, комбинация графики, полей и кнопок, повторяющихся на всех карточках входящих в этот фон. Для редактирования фона в HyperCard был предусмотрен специальный режим, а для ясности он еще и выделялся прерывистой рамкой вокруг планки меню, похожей на кант погон вольноопределяющихся в российской императорской армии.

Анатомия и физиология HyperCard

В стэке обязательно был определен хотя бы один фон, он мог быть пустым (без графики и без принадлежащих ему кнопок и полей). Фонов могло быть сколько угодно.

Карточка (card) – последний из тиражируемых элементов, состоящий из других элементов. Что-то похожее по смыслу на экраны в мобильных операционных системах. В карточке объединялись элементы фона, к которому она принадлежит, и её собственные. И, кроме того, то, что видел на экране своего компьютера пользователь HyperCard, за очень редким исключением (экран Recent, например), было одной из карточек.

Другие элементы в карточке – это поля и кнопки.

Анатомия и физиология HyperCard

Поле (field) – единственный способ существования редактируемого текста в HyperCard. Все остальные тексты (графика) в лучшем случае могли редактироваться только в процессе их создания. Поля состояли из теоретически неограниченного числа строк. На практике в классической системе Mac’ов стандартная (и очень качественная) структура для хранения и обработки текста ограничивала его размер 32-мя килобайтами.

В программах, которые должны были иметь дело с бóльшими текстами, это было одной из существенных проблем, которая успешно решалась (но способы её решения держались в секрете). В HyperCard до преодоления 32-килобайтного барьера дело не дошло. Не было необходимости.

Если поле принадлежало фону, введенный в него текст хранился в памяти карточки.

Кнопка (button) – интерфейсный элемент запуска какого-то действия. В первоначальном замысле предполагалось, что их единственной функцией будет навигация, переход с одной карточки на другую, из стэка в стэк – но очень быстро выяснилось, что гораздо интереснее сделать их универсальными. Кнопки, так же как и поля, могли принадлежать как фону, так и непосредственно карточке.

Инструменты

К инструментам можно было бы отнести все команды, предлагаемые в меню приложения HyperCard, вплоть до Copy/Paste и создания/удаления/копирования карточек, но не будем впадать в крайности. Хотя, если бы я писал книгу, про некоторые из них я бы обязательно написал.

Одним из самых важных принципов чудо-приложения, вдохновленного трансцендентным духом вселенского разума, была навигация между карточками. Те самые связи между тем, что на первый взгляд может казаться никак не связанным одно с другим. Вот не смог я удержаться без намеков на звездную ночь в Лос Гатосе, в паре кварталов от того самого гаража родителей Стива Джобса…

Анатомия и физиология HyperCard

Экран Recent показывал уменьшенные изображения 42 карточек, на которых пользователь побывал последними. Если какая-то карточка посещалась более чем один раз, Recent её показывал только один раз. Это был модальный экран – выйти из него можно было только выбрав какую-нибудь из карточек. По-моему, это не изменилось и в HyperCard 3.0, навечно оставшемся публичной альфа-версией.

На самом деле, никакой эзотерики в этом навигационном инструменте не было. Это одна из любимых идей Джефа Раскина, а Билл Аткинсон, будучи еще студентом, прослушал курс графического пользовательского интерфейса у профессора Раскина.

К специальным стэкам классическое HyperCard’оведение (все издания гудмановского “Полного руководства HyperCard”, рассыпанные в бессмысленные биты многочисленные гайды Apple Computer и мои собственные труды из начала 90-х последнего века прошлого тысячелетия), относит Home и почему-то Help.

Последний был замечательным, я его даже переводил на русский, и больше всего сегодня я рад тому, что он, по-видимому, не сохранился. Если у кого-то есть русский перевод Help, по-тихому пришлите его мне… И тс-с-с! Вдруг это мой!!!

А вот Home действительно играл почти мистическую роль в HyperCard. Настолько важную, что мое первое впечатление от www было омрачено отсутствием в Паутине самой главной страницы. Home был первой карточкой, открываемой HyperCard. В ней были собраны все (по мнению коммерсантов Apple) важные “линки” к самым важным стэкам. К счастью, эту карточку можно было редактировать, в её фон можно было добавлять любое количество дополнительных страниц, прогибая изменчивый мир под себя.

Это был центр навигации, и это было здорово.

Message Box – это однострочный windoid (окно, которое не окно, в Mac’овской системе до сих пор есть их аналог, “плавающие окна”, парящие над пользовательским интерфейсом и всеми другими окнами… По правилам Human Interface Guide, такие окна не должны быть большими и закрывать слишком большое пространство под собой. Узнаю, кто придумал в таких вот плавающих окнах выводить Mac’овский Help, размером в 3/4 экрана…, в который можно было вводить команды на языке HyperScript.

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

HyperScript, чуть не ставший WildScript, я опишу в отдельной статье.

Объектно-ориентированное пространство

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

Классов официально было пять:

  • стэк;
  • фон;
  • карточка;
  • поле;
  • кнопка.

Объекты этих классов обменивались сообщениями, между собой и с “системой”, в её роли выступал объект скрытого, приватного класса – само приложение HyperCard.

У каждого из объектов этих классов был набор свойств, и (за исключением кнопки) еще и контент, содержимое. В стэке – один или несколько фонов, в фоне – карточки, кнопки и поля, в карточках – поля и кнопки, в полях их текст. У кнопок были только свойства, среди них стиль, определяющий, как она должна выглядеть и вести себя.

Расширения

В Mac’е процедуры отрисовки и управления многими элементами интерфейса системы были… заменяемы и переопределяемы. Код стандартных окон, контролов, меню и даже планок меню располагался в кодовых ресурсах, типов WDEF, CDEF, MDEF и им подобных.

Я не уверен, что это началось именно с HyperCard, просто более ранних примеров я не помню – по тому же пути пошел и HyperCard. Для расширения стандартных возможностей приложения в конкретных стэках, в их “ответвление ресурсов” можно было добавить свой (или свои) ресурсы типа XCMD и XFCN.

Правда, сначала их надо было или найти где-нибудь, или написать. В конце 80-х этот код должен был умещаться в 32 K, но для машинного кода это довольно много.

Разница между XCMD и XFCN только в том, что последний – функция, возвращающая значение. Назывались подобные ресурсы “кодовыми”. Теоретически такой ресурс можно было набрать в ResEdit, но… о сверхспособностях поговорим на другом ресурсе.

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

WildCard vs Apple HyperCard

Все просто: Билл Аткинсон назвал придуманное им приложение WildCard, поскольку идея пришла к нему сама и неожиданно, как приходят дикие звери – но когда дело уже шло к релизу и за легализацию нового продукта взялись профессионалы, выяснилось, что эта торговая марка уже занята.

Казалось бы, какие пустяки – сама Apple использует чужую торговую марку (Apple Corps, звукозаписывающей компании Beatles, фактически собственности Пола Маккартни), а в наши дни в мире существуют две трехбуквенные системы, которые называются iOS и IOS.

Объяснять, что такое iOS, на AppleInsider’е вроде бы неуместно. IOS (все буквы заглавные) — это “межсетевая операционная система” компании Cisco, для маршрутизаторов и сетевых коммутаторов этой компании. Для признания юристами достаточно и куда более дальних совпадений.

Но, как говорится, quod licet iovi… Apple и iOS были нужны Стиву Джобсу, а с ним мало кто решался спорить, даже в конце 70-х. Поэтому конфликты торговых знаков уладили в суде, за приличные суммы денег и на каких-то условиях. Причем дело Apple vs Apple несколько раз возвращалось в суд – Apple, которая раньше была Apple Computer, просто рецидивист какой-то. Именно она раз за разом нарушала достигнутые ранее договоренности с Apple Corps, которая немедленно и с огромным удовольствием обращалась с жалобами в суд.

Но, как говорится, что дозволено Юпитеру… Судиться с владельцами торговой марки WildCard из-за незаконнорожденной (пусть и обласканной главой компании) программы и программиста, пусть очень ценного для компании, никто не собирался. Совет директоров этого бы не понял.

Источник

Последние новости