Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Программирование на языке Ruby

Покупка
Артикул: 615785.01.99
К покупке доступен более свежий выпуск Перейти
Фултон, Х. Программирование на языке Ruby [Электронный ресурс] / Х. Фултон. - Москва : ДМК Пресс, 2009. - 688 с.: ил. - ISBN 5-94074-357-9. - Текст : электронный. - URL: https://znanium.com/catalog/product/406949 (дата обращения: 02.03.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.

                Хэл Фултон




Программирование на языке Ruby

Москва

The Ruby Way, Second Edition










 Hal Fulton















      Addison Wesley
  Upper Saddle River, NJ • Boston • Indianapolis • San Francisco NewYork ♦ Toronto ♦ Montreal ♦ London ♦ Munich ♦ Paris ♦ Madrid Capetown ♦ Sydney ♦ Tokyo ♦ Singapore ♦ Mexico City

Программирование на языке Ruby







Хэл Фултон










Москва

УДК 004.438
ББК 32.973.26-018.2



      Фултон X.
Ф94 Программирование на языке Ruby. - М.: ДМК Пресс. - 688 с. : ил.

      ISBN 5-94074-357-9

        Ruby - относительно новый объектно-ориентированный язык, разработанный Юкихиро Мацумото в 1995 году и позаимствовавший некоторые особенности у языков LISP, Smalltalk, Perl, CLU и других. Язык активно развивается и применяется в самых разных областях: от системного администрирования до разработки сложных динамических сайтов.
        Книга является полноценным руководством по Ruby - ее можно использовать и как учебник, и как справочник, и как сборник ответов на вопросы типа «как сделать то или иное в Ruby». В ней приведено свыше 400 примеров, разбитых по различным аспектам программирования, и к которым автор дает обстоятельные комментарии.
        Издание предназначено для программистов самого широкого круга и самой разной квалификации, желающих научиться качественно и профессионально работать на Ruby.






                                                           УДК 004.438
ББК 32.973.26-018.2


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

          All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic, mechanical, photocopying, recording or otherwise, without prior written permission the publisher. For information on getting permission for reprints and excerpts, contact permission@peachpit.com. RUSSIAN language edition published by DMK PUBLISHERS, Copyright © 2007.


ISBN 0672328844
ISBN 5-94074-357-9

                  Copyright © Pearson Education, Inc. © Оформление, ДМК Пресс

Содержание
Предисловие.......................................... 12
Обавторе............................................. 17
Введение............................................. 18
  О втором издании....................................18
  Как организована эта книга..........................21
  Об исходныхтекстах, приведенных в книге.............23
  «Путь Ruby».........................................24
Глава 1. Обзор Ruby...................................29
  1.1. Введение в объектно-ориентированное программирование...................................30
  1.2. Базовый синтаксис и семантика Ruby.............35
  1.3. ООПвRuby.......................................48
  1.4. Динамические аспекты Ruby......................57
  1.5. Потренируйте свою интуицию: что следует запомнить.61
  1.6. Жаргон Ruby....................................76
  1.7. Заключение.....................................79
Глава 2. Строки.......................................80
  2.1. Представление обычных строк....................80
  2.2. Альтернативная нотация для представления строк.81
  2.3. Встроенныедокументы
  2.4. Получениедлины строки..........................83
  2.5. Построчная обработка...........................83
  2.6. Побайтовая обработка...........................84
  2.7. Специализированное сравнение строк.............84
  2.8. Разбиение строки налексемы.....................85
  2.9. Форматирование строк...........................87
  2.10. Строки в качестве объектов ввода/вывода.......87
  2.11. Управление регистром..........................88
  2.12. Вычленение и замена подстрок..................88
  2.13. Подстановкавстроках...........................90
  2.14. Поисквстроке..................................91

Содержание

  2.15. Преобразование символов в коды ASCII и обратно......92
  2.16. Явные и неявные преобразования..................92
  2.17. Дописывание в конец строки......................94
  2.18. Удаление хвостовых символов новой строки и прочих...94
  2.19. Удаление лишних пропусков.......................95
  2.20. Повтор строк....................................96
  2.21. Включение выражений в строку....................96
  2.22. Отложенная интерполяция.........................96
  2.23. Разборданных, разделенныхзапятыми...............97
  2.24. Преобразование строки в число (десятичное или иное).98
  2.25. Кодирование и декодирование строк в кодировке rot13.99
  2.26. Шифрование строк...............................100
  2.27. Сжатие строк...................................101
  2.28. Подсчет числа символов в строке................101
  2.29. Обращение строки...............................102
  2.30. Удаление дубликатов............................102
  2.31. Удаление заданных символов.....................102
  2.32. Печать специальных символов....................102
  2.33. Генерирование последовательности строк.........103
  2.34. Вычисление 32-разрядного CRC...................103
  2.35. Вычисление МО5-свертки строки..................104
  2.36. Вычисление расстоянияЛевенштейна между двумя строками.................................105
  2.37. Ьаэе64-кодирование и декодирование.............106
  2.38. Кодирование и декодирование строк (uuencode/uudecode)..................................107
  2.39. Замена символов табуляции пробелами и сворачивание пробелов в табуляторы.................107
  2.40. Цитированиетекста..............................108
  2.41. Заключение.....................................109
Глава 3. Регулярные выражения..........................110
  3.1. Синтаксис регулярных выражений..................110
  3.2. Компиляция регулярных выражений.................112
  3.3. Экранирование специальных символов..............113
  3.4. Якоря...........................................113
  3.5. Кванторы........................................114
  3.6. Позитивное и негативное заглядывание вперед.....116
  3.7. Обратные ссылки.................................117
  3.8. Классы символов.................................119
  3.9. Обобщенные регулярные выражения.................120

Содержание

Hill

7

  3.10. Сопоставлениеточки символу конца строки.......121
  3.11. Внутренние модификаторы.......................122
  3.12. Внутренние подвыражения.......................122
  3.13. ИиЬуи Oniguruma...............................123
  3.14. Примеры регулярных выражений..................129
  3.15. Заключение....................................133
Глава 4. Интернационализация в Ruby...................134
  4.1. Исторические сведения и терминология...........135
  4.2. Кодировки в пост-ASCII мире....................139
  4.3. Справочники сообщений..........................150
  4.4. Заключение.....................................157
Глава 5. Численные методы.............................158
  5.1. Представление чисел в языке Ruby...............158
  5.2. Основные операции над числами..................159
  5.3. Округление чисел с плавающей точкой............160
  5.4. Сравнение чисел с плавающей точкой.............162
  5.5. Форматирование чисел для вывода................163
  5.6. Вставка разделителей при форматировании чисел..163
  5.7. Работа с очень большими числами................164
  5.8. Использованиекласса BigDecimal.................164
  5.9. Работа с рациональными числами.................166
  5.10. Перемножение матриц...........................167
  5.11. Комплексные числа.............................171
  5.12. Библиотека mathn..............................172
  5.13. Разложение на простые множители, вычисление НОД и НОК................................172
  5.14. Простыечисла..................................173
  5.15. Явные и неявные преобразования чисел..........174
  5.16. Приведениечисловыхзначений....................175
  5.17. Поразрядные операции над числами..............176
  5.18. Преобразование системы счисления..............177
  5.19. Извлечение кубических корней, корней четвертой степени ит. д......................178
  5.20. Определение порядка байтов....................178
  5.21. Численное вычисление определенного интеграла..179
  5.22. Тригонометрия в градусах, радианах и градах...180
  5.23. Неэлементарная тригонометрия..................181
  5.24. Вычисление логарифмов по произвольному основанию... 182
  5.25. Вычисление среднего, медианы и моды набораданных ...182

Содержание

  5.26. Дисперсия и стандартное отклонение...............183
  5.27. Вычисление коэффициента корреляции...............184
  5.28. Генерирование случайных чисел....................185
  5.29. Кэширование функций с помощью метода memoize....186
  5.30. Заключение.......................................187
Глава 6. Символы и диапазоны ............................188
  6.1. Символы...........................................188
  6.2. Диапазоны.........................................192
  6.3. Заключение........................................200
Глава 7. Дата и время....................................202
  7.1. Определение текущего момента времени..............203
  7.2. Работа с конкретными датами (после точки отсчета).203
  7.3. Определение дня недели............................204
  7.4. Определениедаты Пасхи.............................204
  7.5. Вычисление n-ого дня недели в месяце..............205
  7.6. Преобразование из секунд в более крупные единицы.206
  7.7. Вычисление промежутка времени, прошедшего от точки отсчета.........................207
  7.8. Високосныесекунды.................................207
  7.9. Определение порядкового номера дня в году.........208
  7.10. Контрольдаты и времени...........................208
  7.11. Определение недели в году........................209
  7.12. Проверка года на високосность....................210
  7.13. Определение часового пояса.......................210
  7.14. Манипулирование временем без даты................211
  7.15. Сравнение моментов времени.......................211
  7.16. Прибавление интервала к моменту времени..........211
  7.17. Вычисление разности междудвумя моментами времени.............................................212
  7.18. Работа с конкретными датами (до точки отсчета)...212
7.19. Взаимные преобразования объектов Date, Time и DateTime....................................213
  7.20. Извлечение даты и времени из строки..............214
  7.21. Форматирование и печать даты и времени...........215
  7.22. Преобразование часовых поясов....................216
  7.23. Определение числа дней в месяце..................216
  7.24. Разбиение месяца на недели.......................216
  7.25. Заключение.......................................218

Содержание

9

Глава 8. Массивы, хэши и другие перечисляемые структуры...................219
  8.1. Массивы.......................................219
  8.2. Хэши..........................................242
  8.3. Перечисляемыеструктуры вобщем.................252
  8.4. Заключение....................................259
Глава 9. Более сложные структуры данных..............260
  9.1. Множества.....................................260
  9.2. Стеки и очереди...............................263
  9.3. Деревья.......................................268
  9.4. Графы.........................................274
  9.5. Заключение....................................280
Глава 10. Ввод/вывод и хранение данных...............281
  10.1. Файлы и каталоги.............................282
  10.2. Доступ кданным более высокого уровня.........306
  10.3. Библиотека KirbyBase.........................314
  10.4. Подключение к внешним базам данных...........317
  10.5. Заключение...................................329
Глава 11. ООП и динамические механизмы в Ruby........330
  11.1. Рутинные объектно-ориентированныезадачи......331
  11.2. Более сложные механизмы......................356
  11.3. Динамические механизмы.......................375
  11.4. Заключение...................................395
Глава 12. Графические интерфейсы для Ruby............396
  12.1. Ruby/Tk......................................397
  12.2. Ruby/GTK2....................................409
  12.3. FXRuby(FOX)..................................422
  12.4. QtRuby.......................................436
  12.5. Другие библиотеки для создания графических интерфейсов...............446
  12.6. Заключение...................................447
Глава 13. Потоки в Ruby..............................448
  13.1. Создание потоков и манипулирование ими.......449
  13.2. Синхронизация потоков........................458
  13.3. Заключение...................................473

Содержание

Глава 14. Сценарии и системное администрирование......................474
  14.1. Запуск внешних программ.....................474
  14.2. Флаги и аргументы в командной строке........479
  14.3. БиблиотекаЗИеП..............................482
  14.4. Переменныеокружения.........................485
  14.5. Сценарии на платформе MicrosoftWindows......487
  14.6. Моментальный инсталлятордляWindows..........493
  14.7. Библиотеки, о которых полезно знать.........494
  14.8. Работа с файлами, каталогами и деревьями....495
  14.9. Различныесценарии...........................498
  14.10. Заключение.................................502
Глава 15. ЯиЬуи форматыданных.......................503
  15.1. РазборХМ1_иРЕХМ1_...........................503
  15.2. РЗЗиАФт.....................................508
  15.3. Обработка изображений с помощью RMagick.....512
  15.4. Создание документов в формате PDF с помощью библиотеки PDF::Writer...................521
  15.5. Заключение..................................530
Глава 16. Тестирование и отладка....................531
  16.1. БиблиотекаTest::Unit........................531
  16.2. KомплектинструментовZenTest.................535
  16.3. Работасотладчиком Ruby......................538
  16.4. Использование irb в качестве отладчика......541
  16.5. Измерение покрытия кода.....................542
  16.6. Измерениепроизводительности.................543
  16.7. Объекты печати..............................547
  16.8. Заключение..................................548
Глава 17. Создание пакетов и распространение программ.........................550
  17.1. Программа RDoc..............................550
  17.2. Установка и подготовка пакета...............555
  17.3. RubyForgeиRАА...............................559
  17.4. Заключение..................................560
Глава 18. Сетевое программирование...................561
  18.1. Сетевые серверы.............................562
  18.2. Сетевые клиенты.............................572
  18.3. Заключение..................................591

Содержание

Глава 19. RubyMWeb-приложения.......................592
  19.1. Программирование CGI на Ruby................592
  19.2. FastCGI.....................................597
  19.3. Rubyon Rails................................599
  19.4. PазработкаWeb-приложений с помощью Nitro....603
  19.5. Введение BWee...............................615
  19.6. PазработкаWeb-приложений с помощью IOWA.....617
  19.7. RubyиWeb-сервер.............................622
  19.8. Заключение..................................629
Глава 20. Распределенный Ruby.......................630
  20.1. Обзор: библиотека drb.......................630
  20.2. Пример: эмуляция биржевой ленты.............633
  20.3. Rinda: пространство кортежей в Ruby.........636
  20.4. Обнаружение сервисов в распределенном Ruby..640
  20.5. Заключение..................................641
Глава 21. Инструменты разработки для  Ruby..........642
  21.1. Система RubyGems............................642
  21.2. Программа Rake..............................644
  21.3. Оболочка irb................................647
  21.4. Утилита ri..................................652
  21.5. Поддержка со стороны редакторов.............653
  21.6. Интегрированные среды разработки............654
  21.7. Заключение..................................656
Глава 22. Сообщество пользователей Ruby.............657
  22.1. Ресурсы вWeb................................657
  22.2. Новостные группы и списки рассылки..........658
  22.3. Блоги и онлайновые журналы..................658
  22.4. Запросы на изменение Ruby...................659
  22.5. Каналы IRC..................................659
  22.6. Конференции по Ruby.........................659
  22.7. Локальные группы пользователей Ruby.........660
  22.8. Заключение..................................660
Алфавитный указатель................................662

Предисловие

Предисловие ко второму изданию
В древнем Китае люди, в особенности философы, полагали, что под внешней оболочкой мира и любого существа скрыто нечто, чего нельзя ни объяснить, ни описать словами. Это нечто китайцы называли Дао, а японцы - До. На русский язык это слово можно перевести как Путь. Слово «до» входит в такие названия, как дзюдо, кендо, карате-до и айкидо. Это не просто боевые искусства, а целая философия и взгляд на жизнь.
   Так и в языке программирования Ruby есть свои философия и способ мышления. Этот язык заставляет думать по-новому. Он помогает программистам получать удовольствие от своей работы. И не потому, что Ruby был создан в Японии, а потому, что программирование стало важной частью существования - по крайней мере, для некоторых людей, жизнь которых Ruby призван улучшить.
   Как всегда, описать, что такое Дао, трудно. Я чувствую это, но не могу подыскать нужных слов даже на японском, моем родном языке. А вот один смельчак по имени Хэл Фултон попытался, и его первая попытка (первое издание этой книги) оказалась довольно удачной. Попытка номер два увенчалась еще лучшим результатом, чему немало способствовала помощь многих людей из сообщества пользователей Ruby. По мере того как Ruby набирает популярность (отчасти благодаря продукту Ruby on Rails), все важнее становится овладение секретами мастерства производительного программирования на этом языке. Надеюсь, что книга, которую вы держите в руках, поможет вам в решении этой задачи.
Удачной работы!
Юкихиро «Мац» Мацумото
Август 2006 года, Япония

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

Предисловие к первому изданию

III»

13

   По мере того как компьютеры становятся мощнее и дешевле, ситуация постепенно меняется. Возьмем, к примеру, структурное программирование. Машине все равно, насколько хорошо структурирована программа: она просто исполняет ее команда за командой. Идеи структурного программирования обращены к людям, а не к машинам. То же относится и к объектно-ориентированному программированию.
   Пришло время проектировать языки, удобные для людей!
   В 1993 году я разговаривал со своим коллегой о сценарных языках, их выразительности и перспективах. Я считал, что программирование пойдет именно по этому пути и будет ориентироваться на человека. Но меня не вполне устраивали существующие языки, такие как Perl и Python. Я хотел видеть язык более мощный, чем Perl, и более объектно-ориентированный, чем Python. Найти идеальный вариант мне не удалось, поэтому остался один выход: изобрести свой собственный.
   Ruby - не самый простой язык, но ведь и человеческая душа не проста. Ей равно нравятся простота и сложность. Она не приемлет ни слишком примитивных, ни чересчур заумных вещей. Она ищет равновесия.
   Поэтому при проектировании ориентированного на человека языка - Ruby -я следовал принципу наименьшего удивления. Иными словами, работа шла под девизом: хорошо то, что не кажется мне странным. Вот почему я чувствую себя в своей родной стихии и испытываю радость, когда программирую на Ruby. А с момента выхода в свет первой версии в 1995 году многие программисты во всем мире разделили со мной эту радость.
   Как всегда, хочу выразить величайшую благодарность всем членам сообщества, сложившегося вокруг Ruby. Они - причина его успеха.
   Также я благодарен автору этой книги, Хэлу Фултону, за то, что он показал другим Путь Ruby. В книге объясняется философия, стоящая за языком Ruby. Это квинтэссенция моих мыслей и ощущений членов сообщества. Интересно, как Хэлу удалось прочитать мои мысли и раскрыть секрет Пути Ruby!.. Я никогда не встречался с ним лично, надеюсь, что скоро это все-таки произойдет.
   В заключение хочу выразить надежду, что эта книга и сам язык Ruby помогут вам получить удовольствие и радость от программирования.
                                               Юкихиро «Мац» Мацумото Сентябрь 2001, Япония

Благодарности


Благодарности за второе издание
Здравый смысл подсказывает, что второе издание требует в два раза меньше работы, чем первое. Но здравый смысл ошибается.
   Хотя значительная часть текста книги перекочевала прямиком из первого издания, даже эту часть пришлось сильно править. К каждому предложению приходилось ставить вопрос: «Сохранилось ли в 2006 году то, что было верно в 2001-м?» И это только начало!
   Короче говоря, я потратил много сотен часов на подготовку второго издания -примерно столько же, сколько ушло на первое. И тем не менее я «всего лишь автор».
   Книга появляется на свет в результате усилий многих людей. Если говорить об издательстве, то я благодарен Дебре Вильямс Коули (Debra Williams Cauley), Сонь-лин Киу (Songlin Qiu) и Менди Фрэнк (Mandie Frank) за тяжелый труд и бесконечное терпение. Спасибо Джениль Бриз (Geneil Breeze) за неутомимое вычитывание и выпалывание сорняков из моего английского. Есть много других сотрудников, которых я не могу назвать, поскольку их работа проходила за кулисами и я никогда с ними не встречался.
   За техническое редактирование отвечали главным образом Шашанк Дейт (Shashank Date) и Фрэнсис Хван (Francis Hwang). Они прекрасно справились со своей задачей - если остались какие-то ошибки, это всецело моя вина.
   Большое спасибо людям, которые предлагали объяснения, писали код примеров и отвечали мне на многочисленные вопросы. Это сам Мац (Юкихиро Мацумото), Дейв Томас (Dave Thomas), Кристиан Нойкирхен (Christian Neukirchen), Чед Фаулер (Chad Fowler), Дэниэл Бергер (Daniel Berger), Армин Рерль (Armin Roehrl), Стефан Шмидль (Stefan Schmiedl), Джим Вайрих (Jim Weirich), Райан Дэвис (Ryan Davis), Дженни У. (Jenny W.), Джим Фриз (Jim Freeze), Лайл Джонсон (Lyle Johnson), Мартин Де Мелло (Martin DeMello), Март Лоуренс (Mart Lawrence), Рон Джеффрис (Ron Jeffries), Тим Хантер (Tim Hunter), Чет Хендриксон (Chet Hendrickson), Натаниэль Талбот (Nathaniel Talbott) и Бил Клеб (Bil Kleb).
   Особая благодарность активным помощникам. Эндрю Джонсон (Andrew Johnson) здорово обогатил мои знания о регулярных выражениях. Пол Бэтли (Paul Battley) предоставил обширный материал для главы об интернационализации. Масао Муто (Masao Mutoh) помог в написании той же главы, а также снабдил меня материалами по GTK. Остин Зиглер (Austin Ziegler) научил меня секретам

Благодарности за первое издание

III»

15

подготовки PDF-файлов. Калеб Теннис (Kaleb Tennis) дал материал по Qt. Эрик Ходел (Eric Hodel) помог в описании продуктов Rinda и Ring, а Джеймс Бритт (James Britt) внес большой вклад в главу о разработке приложений для Web.
    И еще раз выражаю искреннюю благодарность и восхищение Мацу - не только за помощь, но и прежде всего - за создание Ruby. Domo arigato gozaimasu’!
    Еще раз хочу поблагодарить своих родителей. Они постоянно подбадривали меня и с нетерпением ждали выхода книги... Я еще сделаю из них программистов!
    И опять - спасибо всем членам сообщества пользователей Ruby за неутомимую энергию и дух коллективизма. Особенно я благодарен читателям этой книги (обоих изданий). Я надеюсь, что вы найдете ее информативной, полезной и, быть может, даже увлекательной.

Благодарности за первое издание
Создание книги - плод усилий целого коллектива. Я не понимал этого в полной мере, пока не взялся за это дело сам. Рекомендую всем пройти подобное испытание, хотя оно и не из легких. Нет сомнений, что без помощи многих и многих людей книга не увидела бы свет.
    Прежде всего, выражаю благодарность и восхищение Мацу (Юкихиро Мацумото), который создал язык Ruby. Domo arigato gozaimasu!’
    Спасибо Конраду Шнейкеру (Conrad Schneiker), который подал мне идею написать эту книгу и помог выработать ее общий план. Он же оказал мне неоценимую услугу, познакомив с языком Ruby в 1999 году.
    Материалом для книги меня снабжали несколько человек. Первым хочу назвать Гая Хэрста (Guy Hurst), который написал значительную часть начальных глав, а также два приложения. Его помощь поистине бесценна.
    Спасибо также другим помощникам, называя которых, я не придерживаюсь какого-то определенного порядка. Кэвин Смит (Kevin Smith) многое сделал для раздела главы 6, посвященного GTK, избавив меня от изучения сложной темы в условиях жесткого графика. Патрик Логан (Patrick Logan) пролил свет на графическую систему FOX GUI, описанную в той же главе. Чед Фаулер (Chad Fowler) в главе 9 углубился в тайны XML, а также помог при написании раздела о CGI.
    Благодарю всех, кто правил корректуру, писал рецензии и помогал иными способами: Дона Мучоу (Don Muchow), Майка Стока (Mike Stok), Михо Огисима (Miho Ogishima) и уже упомянутых выше. Спасибо Дэвиду Эпштейну (David Eppstein), профессору математики, который ответил на вопросы по теории графов.
    Одна из замечательных особенностей Ruby - поддержка со стороны сообщества пользователей. В списке рассылки и в конференции многие отвечали на мои вопросы, подавали идеи и всячески помогали. Опять же не придерживаясь определенного порядка, хочу упомянуть Дейва Томаса (Dave Thomas), Энди Ханта (Andy Hunt), Хи-Соб Парка (Hee-Sob Park), Майка Уилсона (Mike Wilson), Ави Брайанта (Avi Bryant), Ясуси Шоджи (Yasushi Shoji «Yashi»), Шуго Маэда (Shugo

  ’ Огромное спасибо (яп.)

Maeda), Джима Вайриха (Jim Weirich) и Масаки Сукета (Masaki Suketa). Как это ни печально, но, скорее всего, кого-то я пропустил.
    Очевидно, что книга никогда не вышла бы без помощи издателя. Многие работали над ней незримо для меня, но особенно я хотел бы поблагодарить Вильяма Брауна (William Brown), который тесно сотрудничал со мной и постоянно поощрял, и Скотта Мейера (Scott Meyer), который скрупулезно занимался объединением всех материалов. Других назвать не могу, потому что никогда о них не слышал. Но они знают себя сами.
    Хочу поблагодарить своих родителей, которые следили за проектом издалека, подбадривали меня и даже дали себе труд ради меня освоить азы программирования.
    Один мой друг как-то сказал: «Если ты написал книгу, которую никто не читает, значит, ты не написал ее вовсе». Поэтому напоследок я хочу поблагодарить читателей. Эта книга для вас. Надеюсь, что она окажется полезной.

Об авторе
Хэл Фултон - обладатель двух ученых степеней по информатике, полученных в Университете штата Миссисипи. Он четыре года преподавал информатику в колледже, пока не переехал в Остин, штат Техас, для работы по контрактам (в основном с отделением компании IBM в Остине). Более 15 лет он работал с различными версиями ОС UNIX, в том числе AIX, Solaris и Linux. С языком Ruby впервые познакомился в 1999 году, а в 2001 приступил к работе над первым изданием этой книги - второй книги на английском языке, посвященной Ruby. Фултон присутствовал на шести конференциях по Ruby и проводил презентации на четырех из них, в частности на первой европейской конференции по языку Ruby, состоявшейся в Карлсруэ (Германия). Сейчас Хэл работает в компании Broadwing Communications, располагающейся в Остине, и занимается вопросами, связанными с большим хранилищем данных и относящимися к нему телекоммуникационными приложениями. В работе он использует язык C++, СУБД Oracle и, конечно, Ruby.
   Фултон по-прежнему постоянно присутствует в списке рассылки и в IRC-канале, посвященном Ruby, а также участвует в нескольких разрабатываемых проектах на Ruby. Он член Ассоциации по вычислительной технике (ACM - Association for Computing Machinery) и компьютерного общества IEEE (Институт инженеров по электротехнике и электронике). В свободное от работы время увлекается музыкой, чтением, искусством и фотографией. Кроме всего прочего, Хэл член общества по изучению Марса и энтузиаст космических полетов. Мечтал бы когда-нибудь совершить такой полет. Проживает в Остине, штат Техас.

К покупке доступен более свежий выпуск Перейти