Повседневная рутина сводит вас с ума? Доверьте ее AppleScript, а сами тем временем наслаждайтесь общением с замечательным компьютером Macintosh.
Каждый день нам приходится выполнять массу повторяющихся действий: переводить файлы из одного формата в другой, делать резервные копии важных данных, подключать или отключать сетевые диски, проверять "винчестер" на отсутствие вирусов. Все эти операции очень важны и совершенно необходимы, но в сотый, а то и тысячный раз нажимать одну и ту же последовательность кнопок - удовольствие ниже среднего. К счастью, надоедливого однообразия можно избежать, если воспользоваться средством автоматизации AppleScript.
Что представляет собой технология AppleScript? Это набор связанных компонентов, позволяющих обеспечить взаимодействие между операционной системой и пользовательскими приложениями.
С одной стороны, на уровне пользователя AppleScript является языком программирования, на котором пишутся управляющие сценарии. Это очень простой - синтаксис максимально приближен к разговорному английскому - и очень мощный язык - в арсенал его средств входят команды для сложных математических вычислений, большой набор управляющих конструкций и даже методы построения диалоговых окон.
С другой стороны, на уровне операционной системы AppleScript представляет собой специальное расширение, основанное на службе обработки событий Macintosh Apple Events. При выполнении сценария все его команды преобразуются в последовательность событий и передаются в указанные в сценарии приложения. После их обработки результат принимается обратно и пересылается источнику. Разумеется, и источников, и приемников событий может быть как по одному, так и по нескольку. Другими словами, возможны ситуации, когда один сценарий управляет большим количеством прикладных программ, и наоборот, когда несколько сценариев контролируют работу одного приложения.
Такая схема взаимодействия обеспечивает весьма широкие возможности. Автоматизации поддается практически все. В простейшем случае это создание небольших утилит, облегчающих обслуживание системы: массовую обработку файлов, запуск программ в определенное время, резервное архивирование рабочих документов и т. д. Более сложный вариант - разработка больших программных комплексов, задействующих множество различных программ, сценариев и даже отдельных компьютеров и серверов. Например, возможно написание сценария, который возьмет на себя всю работу по обновлению Интернет-сайта: при поступлении нового документа в базу данных он самостоятельно сформирует Web-страницу с соответствующим дизайном, затем установит связь с сервером, откорректирует ссылки на имеющихся страницах и разместит поступившую информацию. Или еще один пример - создание сценария, облегчающего верстку однотипных документов: сначала при помощи редактора Adobe Photoshop все рисунки конвертируются в формат EPS и помещаются на другой компьютер (станцию верстки) в специальную папку, которая постоянно опрашивается на предмет поступления новых файлов. Далее изображения передаются в QuarkXРress и размещаются на полосах издания. И наконец, готовый макет отправляется на RIP-сервер для растеризации и последующей печати.
Однако далеко не все приложения поддерживают AppleScript в равной мере. Существует несколько уровней "сценарности". Так, некоторые программы понимают только основные команды - загрузить приложение, открыть документ, вывести на печать и завершить работу (run, open, print и quit). Более "сговорчивые" обладают возможностями автоматизации, обеспечивающими пакетную обработку файлов и выполнение несложных операций. Те же, в которых реализована полная поддержка AppleScript, позволяют контролировать свою работу на самом "глубинном" уровне.
Возникает вопрос: почему в одном приложении, используя сценарий, можно изменить даже установки по умолчанию, а в другом еле-еле удается открыть несколько новых окон? Ответ кроется в объектной модели. Служба обработки системных сообщений Apple Events (основа технологии AppleScript) передает запросы, данные и управляющие команды не просто между программами, а между элементами этих программ, которые называются объектами и имеют вложенную структуру. Эта структура и есть объектная модель. Над каждым ее элементом - объектом - можно выполнять ряд определенных действий, каждый элемент может иметь подчиняющиеся ему объекты, кроме того, каждый элемент обладает набором свойств, которые поддаются контролю или изменению.
Проиллюстрировать вышесказанное поможет схема, приведенная на рис. 1. На ней показана небольшая часть объектной модели приложения Finder. Всякий компонент этой модели, в том числе и сам Finder, позволяет совершить над собой некоторые действия. Скажем, для диска это будет "извлечь накопитель из привода", для рабочей области - "упорядочить значки и окна", а для Корзины - "очистить содержимое". Также любой из компонентов обладает своими особыми характеристиками: к примеру, для папки это "имя", "местоположение в дисковой иерархии", "размер", "дата создания" и "дата модификации", для файла - кроме перечисленных еще и "тип родительского приложения", "версия файла" и атрибут "только для чтения".
Рис. 1 |
Понятно, что чем больше объектов имеется в объектной модели приложения и чем подробнее список характеристик каждого из них, тем лучше приложение поддается управлению сценариями AppleScript. Но с одной оговоркой. При разработке программы ее объектная модель должна быть реализована с учетом особенностей службы системных сообщений Apple Events, иначе она будет представлена в виде одного объекта-приложения, для которого доступны только несколько базовых команд.
Если говорить о конкретных программных продуктах, то исчерпывающей объектной моделью обладают практически все последние версии издательских пакетов и графических редакторов: Adobe InDesign, QuarkXPress, Adobe Photoshop и Adobe Illustrator. Очень хорошая поддержка "сценарности" реализована в офисных пакетах и системах управления базами данных. Ну и, конечно, идеальной совместимостью с AppleScript обладают Mac OS и сопутствующие ей утилиты: Finder, модули ColorSync и Print Center, приложения iTunes, iDVD, iPhoto, QuickTime Player и многие другие.
Что ж, с основами разобрались, перейдем к написанию первых сценариев. Но прежде чем приступить к подробностям и особенностям нового языка программирования, давайте рассмотрим способы создания и запуска приложений AppleScript.
В стандартной поставке системы Mac OS имеется только одна программа для редактирования и отладки сценариев - Script Editor. Она расположена в папке AppleScript, которая, в свою очередь, в зависимости от версии ОС, размещается в каталогах Applications, Apple Extras или ApplicationsApple Extras.
После запуска Script Editor на экран будет выведено окно редактора, типичный вид которого показан на рис. 2. Малое поле ввода в верхней части предназначено для описания или краткого комментария, большое в нижней части - для текста сценария. После набора исходного текста желательно использовать опцию проверки синтаксиса - кроме поиска ошибок редактор выполнит еще и визуальное форматирование.
Рис. 2 |
Существует также альтернативный способ получения действующих сценариев минуя их ручной набор. Технология AppleScript проектировалась с расчетом на то, что она будет применяться для записи макрокоманд. Некоторые приложения, в основном из числа тех, что разработаны программистами Apple, позволяют автоматически создавать сценарии - в процессе выполнения нужных последовательностей действий. Чтобы воспользоваться такой возможностью, следует в Script Editor включить режим записи, перейти в необходимое приложение и приступить к работе. Все операции, осуществляемые в это время, будут переводиться в команды языка AppleScript. Таким образом, можно легко получить черновой вариант сценария и затем, проведя незначительную доработку, превратить его в программу пакетной обработки данных.
Еще одна особенность редактора Script Editor, которую нельзя обойти вниманием, - отображение словарей приложений. Если в меню выбрать команду File*Open Dictionary ("Файл*Открыть словарь"), а в появившемся диалоговом окне открыть исполняемый файл какого-нибудь программного пакета, Script Editor проанализирует код выбранной программы и отобразит информацию о поддерживаемой объектной модели. Эти сведения выводятся в окне, которое можно видеть на рис. 3: в правой части - список доступных команд и объектов, в левой - их краткое описание.
Рис. 3 |
И несколько слов о сохранении и отладке. Как правило, все сценарии записываются на диск в виде простого текста и для повторного использования требуют предварительной загрузки редактора Script Editor, что не всегда удобно. Полностью готовые сценарии лучше хранить в откомпилированном виде, пригодном для автономного использования. С этой целью необходимо при записи указать в меню команду File*Save As Run-Only ("Файл*Сохранить как программу"). Затем в диалоговом окне сохранения файла из выпадающего списка Kind ("Тип") выбирают значение Application ("Программа") 1, проследив, чтобы опция Stay Open ("Оставить открытым") была отключена - она позволяет оставить сценарий в памяти после окончания работы, а Never Show Startup Screen ("Не показывать экран загрузки") - активирована, поскольку отвечает за вывод предупреждения перед началом выполнения сценария. Подготовленный таким образом сценарий уже нельзя редактировать, зато и запускается он, как любое другое приложение, двойным щелчком мыши.
Проводить тестирование и отладку сценариев порой очень трудно - Script Editor не имеет режима пошагового выполнения. Но если открыть журнал событий, для чего следует в меню указать команды Controls*Open Event Log ("Управление*Открыть окно событий"), то в нем можно наблюдать за результатами выполнения каждой строчки программы и контролировать содержимое переменных. (врезка)
Возвратимся к языку AppleScript. Основной его конструкцией, используемой в подавляющем большинстве сценариев, можно считать оператор выбора объекта. Он состоит из двух элементов: открывающего - в нем указывают имя объекта, к которому хотят получить доступ, и закрывающего. Между этими двумя элементами записывают все команды, относящиеся к данному объекту (листинг 1).
Чтобы иметь возможность управлять вложенными объектами, требуется несколько конструкций ... , согласно объектной модели используемого приложения (листинг 2).
Листинг 2
tell application "Finder" tell trash empty end tell end tell
Здесь необходимо подчеркнуть, что AppleScript включает большое количество синонимов для многих своих команд и позволяет некоторые вольности при написании исходного текста сценария. Так, при выделении объекта для выполнения только одной команды независимо от положения этого объекта в иерархической схеме достаточно записать конструкцию в упрощенном варианте. Для примера - предыдущий сценарий в компактной форме (листинг 3).
Листинг 3
tell application "Finder" to tell trash to empty
Очень часто при написании программ автоматизации применяются различные переменные - контейнеры, в которых хранятся всевозможные данные. AppleScript поддерживает множество типов данных, куда входят целочисленные (integer), с плавающей запятой (real), строковые (string) и другие переменные. Любая переменная может быть локальной или глобальной, т. е. сохранять свое значение для различных сценариев или использоваться только в одной программе. Обычно перед использованием каждой переменной требуется ее инициализация - явное указание типа и присвоение значения. Хотя более удобно применять средства AppleScript по самостоятельной инициализации - достаточно задать значение, и тип данных будет определен автоматически. Более того, технология AppleScript берет на себя часть забот по преобразованию типов, правда, последствия такой "интеллектуальности" иной раз могут быть просто непредсказуемы, так что для получения ожидаемого результата требуется строго соблюдать очередность операций (листинг 4).
Листинг 4
set txt_var to "35 + 24.12 = " set num1_var to 35 set num2_var to 24.12 set num3_var to txt_var & (num1_var + num2_var) -- результат: num3_var = "35 + 24.12 = 59.12"
Для явного преобразования типов данных служит операция , после нее записывается название типа, к которому необходимо привести существующую переменную (листинг 5).
Листинг 5
set txt_var to "20.02" set num_var to txt_var as real -- результат: num_var = 20.02
Одним из полезных и самых удобных в использовании типов данных является также список (list). Список напоминает обычную переменную с той лишь разницей, что в нем могут храниться несколько как однотипных, так и разнотипных значений. Обычно в списках хранят наборы связанных между собой сведений - перечисления, названия используемых программ и др. При создании списка описываются все входящие в него значения; в дальнейшем для получения доступа к нужной позиции следует указать ее порядковый номер (листинг 6).
Листинг 6
set lst_var to {"1-й элемент", "2-й элемент", "3-й элемент"} set itm_var to item 2 of lst_var -- результат: itm_var = "2-й элемент"
Для управления ходом выполнения сценариев существуют конструкции описания и вызова подпрограмм, условные операторы и операторы цикла. Условный оператор имеет такой же вид, как и в других языках программирования, может быть записан в сокращенной (без else) или в полной форме; допускается также многоуровневый условный оператор. В листинге 7 приведен пример использования конструкции ... ... в полной форме.
Циклы более разнообразны и включают несколько вариантов: бесконечный цикл, цикл "до", цикл "пока", цикл с заданным количеством повторений, а также цикл с перебором значений из списка. Что характерно, во всех указанных вариантах используется схожий вид записи, в котором присутствуют элементы ... (листинг 8).
Далее рассмотрим средства построения интерфейса. AppleScript имеет команды как для вывода стандартных окон, например для выбора папки или файла, с последующей передачей результата в тело сценария, так и для отображения и ввода произвольной информации. Чтобы получить простое диалоговое окно, следует воспользоваться командой , после чего написать строку (или строки, разделенные символом < >), выводимую на экран (листинг 9).
Если немного изменить этот сценарий и вместо первой строки, в которой определяется проверяемый диск, вставить операции, приведенные в листинге 10, то при каждом запуске сценарий будет запрашивать имя диска. Обратите внимание на последнюю часть команды отображения окна, . Именно она приводит к созданию поля ввода, и если ее опустить, то диалоговое окно превратится в простое информационное сообщение. В данном случае значение по умолчанию не задано, точнее, задано в виде пустой строки, хотя возможно указание здесь и отдельных переменных, и элементов списка, и даже сложных выражений. Кроме того, при построении диалогового окна сходным образом, с использованием элементов и , определяются названия кнопок и кнопка, на которой по умолчанию установлен фокус ввода.
Листинг 10
display dialog "Введите имя диска:" default answer ("") set myDisk to text returned of result
Напоследок составим несложную программу практической направленности, применив большинство рассмотренных элементов языка AppleScript. Эта программа будет производить операцию резервного архивирования и должна работать по следующей схеме. При запуске утилита просит пользователя ввести имя диска, куда будут записаны архивы, затем предлагает выбрать папку, для которой требуется сохранить резервную копию. После того как загрузится архиватор и указанная папка будет обработана, появится окно с вопросом о необходимости повторения всей операции (но уже для других папок). Если пользователь нуждается в сохранении большого количества данных, он может повторять операции архивирования до бесконечности, в противном случае утилита выгрузит архиватор из памяти компьютера и завершит свою работу (листинг 11).
ОБ АВТОРЕ
Сергей Болашов - независимый журналист, приверженец платформы Macintosh, e-mail: alz_alz@mail.ru
1 При сохранении сценария в виде откомпилированной программы для использования в среде Mac OS X из списка Kind ("Тип") следует выбрать значение Classic Applet или Mac OS X Applet - в зависимости от окружения, в котором будет работать созданная программа.
Полезные ресурсы
Прочитав о возможностях AppleScript, многие наверняка захотят продолжить знакомство с этим средством автоматизации. К их услугам несколько Web-узлов сети Интернет и небольшая подборка специализированной литературы.
Среди наилучших сайтов соответствующей тематики достойны упоминания следующие.
Настоящий кладезь технической информации. Несколько учебников для начинающих, большая коллекция примеров и готовых сценариев, документация для разработчиков. Практически все приведенные сведения ориентированы на использование AppleScript в среде Mac OS X. Что, впрочем, удивления не вызывает, ведь описываемый ресурс поддерживается компанией Apple.
Язык: английский.
Сайт предназначен в основном для опытных пользователей технологии AppleScript. Здесь можно найти статьи об автоматизации различных программных продуктов, описания вспомогательных инструментов, используемых при создании сценариев, подборку часто задаваемых вопросов и ответов на них. Кроме того, присутствует почтовая рассылка и регулярно обновляемый каталог ссылок.
Язык: английский.
На этом Web-узле расположены действующие примеры сценариев, обеспечивающие комфортную работу в приложениях Finder и QuarkXPress. Для желающих обсудить проблемы автоматизации и поделиться опытом открыт онлайновый форум. Не забыты и начинающие - для них опубликовано обучающее пособие "Ваш помощник AppleScript", где в простой и понятной форме рассказано о возможностях и особенностях этой технологии. (Данное пособие доступно не только для сетевого просмотра, но и для загрузки с последующим изучением в автономном режиме. Точный адрес файла - http://www.yezhe.ru/applescript/Learning/ YourHelperAppleScript.pdf, размер 209 Кбайт.)
Язык: русский.
www.macedu.hoha.ru/mac/applescript
Справочник по языку AppleScript: описание синтаксиса, основных конструкций, приемов и методов программирования. Увы, на полноту изложения этот справочник претендовать не может. Однако он подкупает своей лаконичностью и хорошей иллюстративностью - на примеры автор не поскупился.
Язык: русский.
Теперь о книгах. Существует немногим более дюжины изданий, охватывающих все сферы применения технологии AppleScript. Это и автоматизация повседневной деятельности, и взаимодействие распространенных программ, например таких, как Adobe InDesign или QuarkXPress, и эффективная работа с Интернет-приложениями, и многое, многое другое. Есть даже книга для начинающих из распространенной серии "для чайников" (AppleScript for Dummies). К сожалению, все они на английском языке и почти все распространяются на коммерческой основе.
Хотя кое-что можно получить бесплатно. На сайте компании Apple выложено руководство AppleScript Language Guide. В нем более чем на 400 страницах самым подробным образом рассмотрены основы технологии, описаны все конструкции и элементы языка, приведена масса полезных примеров. Адрес для загрузки - http://developer.apple.com/techpubs/macosx/ Carbon/pdf/AppleScriptLanguageGuide.pdf, размер файла 2,7 Мбайт.
Правда, если потребуется не общее описание, а что-то более конкретное, то придется приготовить от 10 до 30 долл. (в зависимости от года издания и объема книги) и отправиться в американский магазин Amazon - www.amazon.com.