Новые книги

GNU Emacs is the most popular and widespread of the Emacs family of editors. It is also the most powerful and flexible. Unlike all other text editors, GNU Emacs is a complete working environment—you can stay within Emacs all day without leaving.

, 3rd Edition tells readers how to get started with the GNU Emacs editor. It is a thorough guide that will also "grow" with you: as you become more proficient, this book will help you learn how to use Emacs more effectively. It takes you from basic Emacs usage (simple text editing) to moderately complicated customization and programming.The third edition of

describes Emacs 21.3 from the ground up, including new user interface features such as an icon-based toolbar and an interactive interface to Emacs customization. A new chapter details how to install and run Emacs on Mac OS X, Windows, and Linux, including tips for using Emacs effectively on those platforms.

, third edition, covers:

Learning GNU Emacs

Learning GNU Emacs

Learning GNU Emacs

• How to edit files with Emacs

• Using the operating system shell through Emacs

• How to use multiple buffers, windows, and frames

• Customizing Emacs interactively and through startup files

• Writing macros to circumvent repetitious tasks

• Emacs as a programming environment for Java, C++, and Perl, among others

• Using Emacs as an integrated development environment (IDE)

• Integrating Emacs with CVS, Subversion and other change control systems for projects with multiple developers

• Writing HTML, XHTML, and XML with Emacs

• The basics of Emacs Lisp

The book is aimed at new Emacs users, whether or not they are programmers. Also useful for readers switching from other Emacs implementations to GNU Emacs.
• Атмосфера взаимоуважения и участия как залог успеха компании.

• Эмоциональный комфорт сотрудников как гарантия роста прибыли и повышения продуктивности работы.

• Корпоративные ценности как незабываемый опыт эмоционального взаимодействия с брендом.

Адресованная в первую очередь бизнесменам-руководителям, «Winning the Hearts: Достучаться до сердец сотрудников» Михаила Воронина и Надежды Маковой о том, как завоевать сердца сотрудников и превратить разношерстный коллектив «подчиненных» в успешную и сплоченную команду коллег, друзей и лояльных потребителей продукции компании. Приведенные авторами результаты исследований убедительно доказывают: индекс счастья сотрудников не менее важный показатель здоровья бизнеса, чем оборот и рентабельность, а значит, радость от работы – «это уже не Wow, это Must».

Using chat to Automate Dialing



Использование скрипта для автоматического дозвона

Одна из вещей, которые могут испугать Вас как неудобные в вышеизложенном примере то, что Вы должны установить связь вручную прежде, чем запустить pppd. В отличие от dip, pppd не имеет собственного языка скриптов для набора номера и регистрации, а полагается на внешнюю программу или shell-скрипт для того, чтобы сделать это. Команда, которая будет выполнена, может быть передана pppd опцией connect командной строки. pppd переназначит ввод и вывод к последовательной линии. Пакет pppd имеет очень простую программу chat для этих целей.

Хорошая альернатива для этого expect, написанная Don Libes. Она имеет очень мощный язык, основанный на Tcl, и была разработана для этого типа приложений. Именно ее стоит использовать в случае длинного и сложного процесса входа в систему.

Программа chat позволяет Вам определить скрипт в стиле UUCP. В основном скрипт состоит из последовательности чередующихся строк, которые ожидается получить от удаленной системы, и ответов, которые мы должны ей послать. Мы будем называть expect и send строки, соответственно для приема и передачи. Типичная часть chat-скрипта:

ogin: b1ff ssword: s3|<r1t

Он сообщает chat, что нужно ждать ответ удаленной системы с запросом имени пользователя (login prompt) и вернуть ей в ответ имя b1ff. Мы ждем только ogin: таким образом, не имеет значения с символа в верхнем или нижнем регистре начинается запрос, или он приходит искаженным. Следующяя строка заставит chat ждать запрос пароля и послать свой пароль в ответ.

Это, в основном, все то, для чего предназначены chat-скрипты. Полный скрипт для соединения с PPP-сервером должен включать соотствующие команды модема. Допустим, что модем понимает Hayes команды, и номер телефона сервера 318714. Полный вызов chat для установки связи с c3po:

$ chat -v '' ATZ OK ATDT318714 CONNECT '' ogin: ppp word: GaGariN

По определению, первая строка должна быть expect-строкой, но так как модем не будет сообщать что-нибудь прежде, чем мы запустим его, запустим chat так, чтобы он сначала ожидал пустую строку. Мы посылаем ATZ, команду reset для Hayes-совместимых модемов и ждем реакцию (OK). Следующая строка посылает команду dial с номером телефона для chat и ожидает сообщение CONNECT в ответ. За этим снова следует пустая строка, потому что мы не хотим ничего посылать, но надо подождать для быстрого входа в систему. Остальная часть chat-скрипта работает точно так же, как описано выше.

Опция -v сообщает chat о необходимости вести подробный протокол средствами демона syslog вызовом local2.

Определение chat-скрипта в командной строке несет оправданный риск, потому что пользователи могут просматривать командную строку любого процесса с использованием команды ps. Вы можете избежать этого, помещая chat-скрипт в файл, скажем dial-c3po. Вы можете заставить chat взять скрипт из файла вместо командной строки, передавая ему опцию -f, сопровождаемую именем файла. Наш скрипт dial-c3po будет выглядеть так:

''      ATZ
OK      ATDT318714
CONNECT ''
ogin:   ppp
word:   GaGariN
Слева написаны строки, которые мы ждем, справа наши ответы на них для передачи удаленной машине.

Вызов pppd будет таким:

# pppd connect "chat -f dial-c3po" /dev/ttyS3 38400 -detach \
        crtscts modem defaultroute

Помимо опции connect, которая определяет скрипт дозвона, мы добавили еще две опции в командной строке: -detach, которая сообщает pppd не отделяться от консоли и стать фоновым процессом. Ключевое слово modem заставит его выполнить некоторые действия, специфичные для модема, на последовательном устройстве, подобно "повесить трубку" после вызова. Если Вы не используете это ключевое слово, pppd не будет определять линию DCD и не обнаружит неожиданного обрыва связи.

Примеры, показанные выше были довольно просты; chat позволяет создавать намного более сложные скрипты. Одна очень полезная особенность, это способность к точному определению строки, на которой можно прервать chat с сообщением об ошибке. Типичные аварийные строки BUSY или NO CARRIER, которые модем обычно генерирует, когда вызываемый номер занят или не поднимает трубку. Для того, чтобы сделать так, чтобы chat их распознавал, Вы можете определить начало скрипта, используя ключевое слово ABORT:

$ chat -v ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ...

В подобном режиме Вы можете изменить значение блокировки по времени для частей скрипта, вставляя опции TIMEOUT.

Иногда нужно иметь возможность условного выполненич частей скрипта. Например, когда Вы не получаете запрос имени пользователя с удаленной машины, возможно, стоит послать BREAK или возврат каретки. Вы можете достичь этого, присоединяя sub-скрипт к expect-строке. Он состоит из последовательности send и expect строк точно таких же, как и обычный скрипт. Sub-скрипт отделяется тире и выполняется всякий раз, когда не было ничего получено в качестве ожидаемой строки. В примере, изложенном выше, мы модифицировали бы chat-скрипт следующим образом:

ogin:-BREAK-ogin: ppp ssword: GaGariN

Теперь, когда chat видит, что удаленная система не посылает запрос на вход в систему, sub-скрипт выполняется, сначала посылая BREAK, а затем снова ожидает запрос для входа в систему. Если теперь запрос появится, то основной скрипт будет продолжаться как обычно, иначе он прервется с сообщением об ошибке.