Опубликовано

Новинка: “Хозяйка Спасского озера. Заволжские сказки”

Хозяйка Спасского озера. Заволжские сказки.

Лесное Заволжье протянулось от Нижнего Новгорода до Костромской области и Республики Марий Эл. Этот край овеян мифами, связан с важными и героическими событиями российской истории. Светлые волжские берега, дремучие таёжные леса, таинственные озёра и реки хранят много легенд и сказок народов, живущих здесь, — русских, марийцев, мордвы, татар.
Ирина Дружаева, член Союза писателей России, автор публикаций в «Весёлых картинках», «Мурзилке», лауреат кинофестиваля «Лучезарный ангел» и премии «Золотое перо России», услышала эти сказки в детстве от своей бабушки и других жителей городецких и керженецких деревень. Литературный талант и любовь к родному краю превратили народные истории в захватывающие литературные сказки.

Книгу можно купить в нашем интернет-магазине.

 

Автор

Ирина-Дружаева

“… Люблю природу родимой керженской тайги, люблю сказки, бережно храню в душе впечатления радостного детства. Умение удивляться всему и вся – одуванчикам на лужайке, головастикам в луже, разноцветным камешкам на дне журчащего ручья. Они казались волшебными и драгоценными в ручье. Но стоило вытащить их из воды, высыхали и становились серой галькой. Ещё тогда поняла, что волшебство не всегда надо хватать руками. В него можно верить, о нём нужно мечтать, о нём хочется писать.”

Ирина Дружаева

Художник

Марина Дамбиева

Марина Дамбиева — известный художник из Улан-Удэ. Один из авторов флага и герба Усть-Ордынского Бурятского автономного округа. В настоящее время живет и работает в Санкт-Петербурге.
“Сейчас работаю в издательстве, делаю книжки, иллюстрации, дома пишу картины, живу нормально и радуюсь каждому дню, чего и всем желаю!”

Опубликовано

Новый набор для юных конструкторов “BBC micro:bit…”

BBC micro:bit. Набор для юных конструкторов + КНИГА

Набор “BBC micro:bit. Набор для юных конструкторов + КНИГА” разработан на основе опыта работы с детьми 5-7 классов на уроках информатики и внеурочных занятиях. Рассмотрено более 35 творческих проектов с использованием учебной платы BBC micro:bit. В состав набора входит книга “BBC micro:bit для юных конструкторов и программистов”, плата BBC micro:bit, а также электронные компоненты, необходимые для выполнения проектов из книги.
С помощью этого набора ребёнок шаг за шагом через игру и творчество освоит основы программирования, научится проектировать и конструировать простейшие электронные устройства. Особое внимание уделено разработке увлекательных компьютерных игр. Разработка кода выполняется в дружелюбной для детей в Scratch-подобной среде визуального программирования MakeCode. Электронный архив на сайте издательства содержит чертежи моделей конструкций и инструкции по их сборке.

СОСТАВ НАБОРА

✓КОНТРОЛЛЕР
x1         Плата BBC micro:bit

ПРОВОДА
x1         Кабель USB для загрузки программы
x10       Провода с “крокодилами” на обоих концах

РЕЗИСТОРЫ, ПОТЕНЦИОМЕТРЫ
x10       Резистор 100 Ом ¼ Вт
x10       Потенциометр 10 кОм

СВЕТОДИОДЫ
x2         Светодиоды красные 5 мм
x2         Светодиоды желтые 5 мм
x2         Светодиоды синие 5 мм
x2         Светодиоды зеленые 5 мм

ПИТАНИЕ
x1         Отсек для двух батареек 1,5 В AAA (или AA)*, выключателем и штекером для подключения к плате BBC micro:bit
x2         Батарейки AAA (или AA)*

КНИГА
x1         Елисеева О., Семионенков М., Тузова О. «BBC micro:bit для юных конструкторов и программистов» — СПб.: БХВ-Петербург, 2022— 208 с.

ВИДЕОУРОКИ

От авторов книги “BBC micro:bit для юных конструкторов и программистов“, которая входит в состав набора.

Предисловие для юного читателя

Дорогой читатель!

У тебя в руках необычная книга. Вместе с ней ты выполнишь более 20 проектов, основную роль в которых играет удивительное устройство — компьютер, помещающийся на ладони. Называется это устройство BBC micro:bit или просто — микро:бит. Мы старались собрать в книге проекты, которые были бы интересны всем — мальчикам и девочкам, любителям программирования и тем, кто только ещё знакомится с этой наукой, «технарям» и «гуманитариям». Читая книгу и выполняя описанные в ней проекты, ты научишься проектировать и конструировать «умные» устройства, игры, модели реального мира с электронными элементами и управлять ими с помощью компьютерных программ, написанных для микро:бита. И это не фантастика.

Микро:бит — действительно, удивительное устройство. Его малые размеры  не помешали разработчикам разместить на плате современный достаточно мощный процессор, программируемые кнопки, светодиодный дисплей, компас, акселерометр, микрофон, динамик, датчики света и температуры, Bluetooth-антенну, контакты для подключения внешних устройств. При этом научиться программировать микро:бит и управлять им совсем не сложно. Если тебе уже приходилось работать в среде Scratch, то многое покажется знакомым — микро:бит мы так же будем программировать на визуальном языке, в котором программа собирается, как пазл, из командных блоков, но в другой среде — бесплатном облачном редакторе MakeCode for micro:bit, в котором есть всё необходимое для программирования «железа». Однако от «иметь всё необходимое» до «уметь» — длинный путь. Преодолеть его поможет наша книга.

Предисловие для учителя и руководителя кружка технического творчества

Уважаемый учитель!

В аннотации написано, что книга предназначена для самостоятельного изучения школьниками 11+, а также для использования учителями информатики и технологии общеобразовательных школ и преподавателями дополнительного образования в своей работе. К этому добавим, что материалы книги прошли успешную апробацию в школах, которые объединяет и соединяет международная образовательная сеть ORT FSU (https://www.facebook.com/ort.stem/). Это школы России (Москвы, Санкт-Петербурга, Самары, Казани), Украины, Молдовы, Эстонии и других государств.

С учебной точки зрения в книге можно выделить следующие темы.

  1. Основы программирования.
  2. Введение в моделирование программируемых технологических систем с использованием электронных компонентов, конструирование простейших электрических цепей.
  3. Конструирование из картона и бумаги.

Микро:бит — отличный инструмент для знакомства школьников 5–7 классов с основами программирования. Разрабатывая проекты, получая реальный осязаемый результат, подросток освоит, причём на практике, основные понятия и приёмы программирования:

  • алгоритм и исполнитель, формальный язык исполнителя, компьютерная программа;
  • линейный, циклический алгоритм (разные виды циклов), ветвление, вложенное ветвление;
  • переменная: создание, задание и изменение значения, случайное значение;
  • событие, обработка события;

функция, функция с параметром;

  • объект спрайт, управление спрайтом, свойства спрайта;
  • массивы (числовой массив, массив изображений, массив спрайтов);
  • работа с библиотеками.

Следует отметить очень важную характеристику среды, в которой происходит обучение программированию: микро:бит и среда программирования разработаны и развиваются в парадигме, заложенной ещё основателем Лого, всемирно известным учёным Сеймуром Пейпертом (Seymour Papert) — «низкий порог и высокий потолок». Для начала работы с микро:битом не нужна специальная подготовка, достаточно иметь базовые навыки работы с компьютером и школьные знания начального уровня. В то же время микро:бит позволяет решать задачи высокого уровня сложности, которые могут быть интересны и опытному программисту. При этом делается акцент на самостоятельно творчество и оно не является навязанным, а рождается эмоциональным настроем: работать с микро:битом интересно и весело. Юные разработчики легко осваивают базовые приёмы программирования микро:бита независимо от своих математических способностей. При этом всегда есть пространство для решения сложных задач, которые интересны и профессионалам. Аргументом могут служить группа Micro:bit Fans в социальной сети Facebook (https://www.facebook.com/groups/477091146011242), насчитывающая более 4 тысяч взрослых пользователей, и развивающаяся русско-язычная группа BBC micro:bit по-русски (https://www.facebook.com/groups/microbit.ru).

Эта книга — начальное знакомство с электронной платой микро:бит и её возможностями, поэтому в рассмотренных моделях технологических систем используется минимальное количество внешних аксессуаров (светодиоды, резисторы, потенциометр). На самом деле, многие фирмы выпускают наборы электроники для микро:бита, в которые входят различные датчики (более 30), моторы, сервоприводы и многое другое. В множестве аксессуаров для микро:бита необходимо выделить видеосенсор с искусственным интеллектом HuskyLens, с помощью которого школьники могут наглядно на практике познакомиться с проблемами машинного обучения и разработать модели технологических систем с элементами искусственного интеллекта. Кроме наборов электроники можно приобрести и роботов, управляемых микро:битом. Одному из таких роботов — DFRobot Maqueen — Михаил Семионенков посвятил свою книгу «Путешествие в Робокодию».

Для того чтобы придать изделию (модели) законченный вид, необходимы навыки конструирования. В книге рассматривается конструирование из бумаги как наиболее доступный способ, но микро:бит также прекрасно сочетается с 3D-печатью (рис. П5). Примеры можно посмотреть на сайте MyMiniFactory (https://www.myminifactory.com/category/bbc-micro-bit/).

Проекты, рассмотренные в книге, с полным правом можно отнести к STEAM-проектам. В них тесно переплетены естественные науки, технология, инженерное творчество, искусство, математика, и при этом у ребёнка есть личная заинтересованность в обучении, потому что нужно узнать, научиться, понять, чтобы получить результат — осязаемый, понятный, востребованный.

Современная электронная плата микро:бит (BBC micro:bit) позволяет строить самые разные образовательные траектории. Наша книга — лишь первая точка этих маршрутов.

Опубликовано

Вышла книга Герберта Уэллса “Волшебная лавка”

Волшебная лавка

Удивительная история для детей от основоположника жанра фантастики Герберта Уэллса!
Однажды Джибс и его отец случайно зашли в неприметный магазинчик, в котором продавались всякие штуки для фокусов. А может быть и для настоящей магии… Игрушечные солдатики, стеклянные шарики, даже настоящий белый кролик из шляпы фокусника — в этом магазине можно было купить всё, что пожелаешь и даже получить пару чудес в подарок. И как полагается в волшебном магазинчике, сюрпризы там поджидали на каждом шагу.
Для младшего школьного возраста

Оказываясь на той улочке, я издалека поглядывал на Волшебную лавку. Даже проходил мимо пару раз: в окошке магазинчика теснились занятные вещицы — волшебные шарики, игрушки-несушки, таинственные конусы, куклы чревовещателя, корзина с реквизитом для фокусов, колоды карт, выглядевшие совершенно неинтересно, и всё такое прочее. Никогда меня не тянуло зайти туда, пока однажды Джибс внезапно не ухватил меня за палец и не подтащил к окну и стал так упрашивать, что просто ничего не оставалось, кроме как последовать за ним…

 

Книгу можно купить в нашем интернет-магазине.

 

Художник

Ирина Нюренберг

Ирина Нюренберг – художник-иллюстратор, г. Санкт-Петербург. Окончила Воронежское художественное училище (специальность живописец-педагог) и СПГХПА им. А.Л.Штиглица (кафедра станковой и книжной графики).

Автор

Герберт Уэллс

Герберт Уэллс (1866–1946) родился в Англии. Карьеру Уэллса, возможно, определил несчастный случай — в детстве он сломал обе ноги, и проводил всё время дома, благодаря чему много читал. После школы поступил в Педагогический Колледж в Лондоне. Учился у известного биолога Томаша Хаксли, который оказал на него сильное влияние. «Научная фантастика» Уэллса (хотя он никогда не называл её так) явно создавалась под влиянием его занятий в Педагогическом Колледже и научно-биологических интересов.
Уэллс стал известным благодаря своей первой работе — «Машина времени» в 1895 году. Вскоре после опубликования этой книги, Уэллс написал «Остров доктора Моро» (1895); «Человек-невидимка» (1897), и наиболее известную — «Война Миров» (1898). В его романах явно прослеживается беспокойство писателя за общество в мире, где технология и научное развитие продвигаются очень быстро.

Опубликовано

Новинка: Laravel 9. Быстрая разработка веб-сайтов на PHP

Laravel 9. Быстрая разработка веб-сайтов на PHP

Представляем книгу Владимира Дронова “Laravel 9. Быстрая разработка веб-сайтов на PHP“.

Книга представляет собой полное описание фреймворка Laravel 9 для быстрой разработки сайтов на языке PHP. Дан краткий вводный курс для начинающих, в котором описывается разработка простого учебного сайта — электронной доски объявлений. Описаны базовые инструменты Laravel: миграции, модели, маршруты, контроллеры, шаблоны, средства обработки пользовательского ввода и сохранения выгруженных файлов, валидаторы, шаблоны, пагинаторы и инструменты разграничения доступа. Рассказано о более развитых средствах: внедрении зависимостей, провайдерах, посредниках, событиях и их обработке, отправке электронной почты, оповещениях, очередях и отложенных заданиях, встроенном планировщике, инструментах кеширования, локализации сайтов и расширении возможностей встроенной утилиты artisan. Описаны дополнительные библиотеки для обработки BBCode-тегов и CAPTCHA, вывода графических миниатюр, аутентификации через социальные сети. Рассмотрено программирование веб-служб REST, вещание по протоколу WebSocket и публикация сайта.

    • Модели, контроллеры и шаблоны
    • Разграничение доступа
    • CAPTCHA
    • BBCode
    • Аутентификация через социальные сети
    • Обработка событий
    • Оповещения
    • Отложенные задания
    • Планировщик
    • Локализация сайтов
    • Разработка веб-служб REST
    • Публикация сайта

Дронов Владимир Александрович, профессиональный программист, писатель и журналист, работает с компьютерами с 1987 года. Автор более 30 популярных компьютерных книг, в том числе «Django 2.1. Практика создания веб-сайтов на Python», “HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера“, «Python 3. Самое необходимое», «Python 3 и PyQt 5. Разработка приложений», “Laravel. Быстрая разработка современных динамических Web-сайтов на PHP, MySQL, HTML и CSS“, “Angular 4. Быстрая разработка сверхдинамических Web-сайтов на TypeScript и PHP” и книг по продуктам Adobe Flash и Adobe Dreamweaver различных версий. Его статьи публикуются в журналах “Мир ПК” и “ИнтерФейс” (Израиль) и интернет-порталах “IZ City” и “TheVista.ru”.

Книгу “Laravel 9. Быстрая разработка веб-сайтов на PHP” можно купить со скидкой в интернет-магазине издательства “БХВ”.

Предисловие…………………………………………………………………………………………… 19

Почему именно Laravel?……………………………………………………………………………………………………………. 19

О чем эта книга?…………………………………………………………………………………………………………………………. 20

Используемое ПО……………………………………………………………………………………………………………………….. 21

Типографские соглашения………………………………………………………………………………………………………… 22

Часть I. Основы Laravel на практическом примере……….. 25

Глава 1. Простейший веб-сайт — доска объявлений……………………………… 27

1.1. Подготовительные действия………………………………………………………………………………………………. 27

1.2. Проект и его создание. Папка проекта……………………………………………………………………………… 27

Теория………………………………………………………………………………………………………………………………………. 27

Практика………………………………………………………………………………………………………………………………….. 28

1.3. Запуск проекта. Отладочный веб-сервер PHP………………………………………………………………….. 29

1.4. Контроллеры и действия……………………………………………………………………………………………………. 30

Теория………………………………………………………………………………………………………………………………………. 30

Практика………………………………………………………………………………………………………………………………….. 31

1.5. Маршруты и списки маршрутов. Фасады………………………………………………………………………… 32

Теория………………………………………………………………………………………………………………………………………. 32

Практика………………………………………………………………………………………………………………………………….. 33

1.6. Настройки проекта. Подготовка проекта к работе с базой данных SQLite…………………… 34

Теория………………………………………………………………………………………………………………………………………. 34

Практика………………………………………………………………………………………………………………………………….. 34

1.7. Миграции…………………………………………………………………………………………………………………………….. 36

Теория………………………………………………………………………………………………………………………………………. 36

Практика………………………………………………………………………………………………………………………………….. 36

1.8. Модели…………………………………………………………………………………………………………………………………. 38

1.9. Консоль Laravel…………………………………………………………………………………………………………………… 39

1.10. Работа с базой данных…………………………………………………………………………………………………….. 40

1.11. URL-параметры. Внедрение зависимостей…………………………………………………………………….. 43

Теория………………………………………………………………………………………………………………………………………. 43

Практика………………………………………………………………………………………………………………………………….. 44

1.12. Шаблоны……………………………………………………………………………………………………………………………. 46

Теория………………………………………………………………………………………………………………………………………. 46

Практика………………………………………………………………………………………………………………………………….. 46

1.13. Наследование шаблонов………………………………………………………………………………………………….. 51

Теория………………………………………………………………………………………………………………………………………. 51

Практика………………………………………………………………………………………………………………………………….. 51

1.14. Именованные маршруты………………………………………………………………………………………………….. 53

1.15. Статические файлы…………………………………………………………………………………………………………… 54

Глава 2. Доска объявлений 2.0: разграничение доступа,
работа с объявлениями и локализация…………………………………………………… 55

2.1. Межтабличные связи. Работа со связанными записями………………………………………………….. 55

2.2. Вход и выход. Раздел пользователя………………………………………………………………………………….. 58

Теория………………………………………………………………………………………………………………………………………. 58

Практика………………………………………………………………………………………………………………………………….. 59

2.3. Добавление, правка и удаление записей………………………………………………………………………….. 64

2.4. Валидация данных……………………………………………………………………………………………………………… 70

2.5. Разграничение доступа. Посредники, политики и провайдеры……………………………………… 72

Теория………………………………………………………………………………………………………………………………………. 72

Практика………………………………………………………………………………………………………………………………….. 73

2.6. Получение сведений о текущем пользователе…………………………………………………………………. 76

2.7. Локализация веб-сайта………………………………………………………………………………………………………. 76

Часть II. Базовые инструменты………………………………………………… 81

Глава 3. Создание, настройка и отладка проекта…………………………………… 83

3.1. Подготовка к установке……………………………………………………………………………………………………… 83

3.2. Создание проекта……………………………………………………………………………………………………………….. 83

3.2.1. Создание проекта с помощью Composer…………………………………………………………………….. 83

3.2.2. Создание проекта с помощью Laravel Installer…………………………………………………………… 84

3.3. Папки и файлы проекта………………………………………………………………………………………………………. 85

3.4. Настройки проекта……………………………………………………………………………………………………………… 87

3.4.1. Две разновидности настроек проекта…………………………………………………………………………. 87

3.4.1.1. Локальные настройки…………………………………………………………………………………………. 87

3.4.1.2. Рабочие настройки………………………………………………………………………………………………. 88

3.4.2. Настройки проекта по категориям………………………………………………………………………………. 89

3.4.2.1. Базовые настройки проекта……………………………………………………………………………….. 89

3.4.2.2. Настройки режима работы веб-сайта……………………………………………………………….. 90

3.4.2.3. Настройки шифрования………………………………………………………………………………………. 90

3.4.2.4. Настройки баз данных………………………………………………………………………………………… 91

3.4.3. Доступ к настройкам из программного кода……………………………………………………………… 94

3.4.4. Создание своих настроек……………………………………………………………………………………………… 95

3.5. Базовые инструменты отладки………………………………………………………………………………………….. 96

3.5.1. Отладочный веб-сервер………………………………………………………………………………………………… 96

3.5.2. Вывод сообщений об ошибках…………………………………………………………………………………….. 97

Глава 4. Миграции и сидеры………………………………………………………………….. 99

4.1. Миграции…………………………………………………………………………………………………………………………….. 99

4.1.1. Создание миграций…………………………………………………………………………………………………….. 100

4.1.2. Класс миграции…………………………………………………………………………………………………………… 100

4.1.3. Создание таблиц…………………………………………………………………………………………………………. 101

4.1.3.1. Создание полей………………………………………………………………………………………………….. 101

4.1.3.2. Реализация «мягкого» удаления записей в таблицах…………………………………….. 105

4.1.3.3. Указание дополнительных параметров полей……………………………………………….. 105

4.1.3.4. Создание индексов…………………………………………………………………………………………….. 107

4.1.3.5. Создание полей внешнего ключа…………………………………………………………………….. 108

4.1.3.6. Задание дополнительных параметров таблиц……………………………………………….. 111

4.1.4. Правка и удаление таблиц…………………………………………………………………………………………. 111

4.1.4.1. Правка и удаление полей………………………………………………………………………………….. 111

4.1.4.2. Переименование и удаление индексов…………………………………………………………….. 113

4.1.4.3. Удаление полей внешнего ключа и управление соблюдением
ссылочной целостности…………………………………………………………………………………………………. 113

4.1.4.4. Переименование и удаление таблиц……………………………………………………………….. 114

4.1.5. Проверка существования таблиц и полей………………………………………………………………… 114

4.1.6. Указание базы данных, с которой будут работать миграции………………………………… 115

4.1.7. Обработка миграций…………………………………………………………………………………………………… 115

4.1.7.1. Применение миграций……………………………………………………………………………………….. 115

4.1.7.2. Откат миграций, обновление, сброс и очистка базы данных………………………… 116

4.1.7.3. Создание журнала миграций и просмотр их состояния………………………………… 117

4.1.8. Дамп базы данных как альтернатива миграциям……………………………………………………. 118

4.2. Сидеры……………………………………………………………………………………………………………………………….. 118

4.2.1. Использование корневого сидера……………………………………………………………………………… 119

4.2.2. Использование подчиненных сидеров………………………………………………………………………. 119

4.2.3. Выполнение сидеров…………………………………………………………………………………………………… 120

Глава 5. Модели: базовые инструменты……………………………………………….. 121

5.1. Создание моделей…………………………………………………………………………………………………………….. 121

5.2. Класс модели и соглашения по умолчанию…………………………………………………………………… 122

5.3. Параметры модели……………………………………………………………………………………………………………. 123

5.3.1. Параметры полей модели…………………………………………………………………………………………… 123

5.3.2. Параметры обслуживаемой таблицы……………………………………………………………………….. 123

5.3.3. Параметры преобразования типов……………………………………………………………………………. 124

5.3.4. Реализация «мягкого» удаления записей в моделях………………………………………………… 127

5.4. Создание связей между моделями…………………………………………………………………………………… 127

5.4.1. Связь «один-со-многими»……………………………………………………………………………………………. 127

5.4.2. Связь «один-с-одним из многих»………………………………………………………………………………… 129

5.4.3. Связь «один-с-одним»…………………………………………………………………………………………………. 131

5.4.4. Связь «многие-со-многими»………………………………………………………………………………………… 131

5.4.4.1. Использование связующих моделей………………………………………………………………… 135

5.4.5. Пометка записи первичной модели как исправленной при правке или удалении связанных записей вторичной модели………………………………………………………………………………………………………………………………………………… 136

5.4.6. Сквозная связь «один-со-многими»……………………………………………………………………………. 136

5.4.7. Сквозная связь «один-с-одним»………………………………………………………………………………….. 137

5.4.8. Записи-заглушки…………………………………………………………………………………………………………. 137

5.4.9. Замкнутая связь…………………………………………………………………………………………………………… 138

5.5. Методы моделей……………………………………………………………………………………………………………….. 139

5.6. Преобразователи. Акцессоры и мутаторы……………………………………………………………………… 139

5.6.1. Виртуальные поля………………………………………………………………………………………………………. 141

5.6.2. Акцессоры и мутаторы в предыдущих версиях Laravel………………………………………….. 141

Глава 6. Запись данных……………………………………………………………………….. 143

6.1. Добавление, правка и удаление записей с помощью моделей……………………………………… 143

6.1.1. Добавление записей. Построитель запросов……………………………………………………………. 143

6.1.2. Правка записей……………………………………………………………………………………………………………. 145

6.1.2.1. Правка значений отдельных полей………………………………………………………………….. 146

6.1.2.2. Проверка, значения каких полей изменились…………………………………………………. 147

6.1.3. Удаление записей……………………………………………………………………………………………………….. 149

6.1.3.1. «Мягкое» удаление записей……………………………………………………………………………… 149

6.1.4. Работа со связанными записями………………………………………………………………………………… 150

6.1.4.1. Связи «один-со-многими» и «один-с-одним»: связывание
существующих записей…………………………………………………………………………………………………. 150

6.1.4.2. Связи «один-со-многими» и «один-с-одним»: добавление и правка связанных записей 151

6.1.4.3. Связь «один-с-одним из многих»………………………………………………………………………. 152

6.1.4.4. Связь «многие-со-многими»: связывание записей…………………………………………… 153

6.1.4.5. Связь «многие-со-многими»: добавление и правка связанных записей………… 155

6.1.5. Копирование записей…………………………………………………………………………………………………. 156

6.2. Массовые добавление, правка и удаление записей………………………………………………………. 156

6.2.1. Массовое добавление записей…………………………………………………………………………………… 156

6.2.2. Массовая правка записей…………………………………………………………………………………………… 158

6.2.3. Массовое удаление записей………………………………………………………………………………………. 159

6.2.4. Использование фасада DB для записи данных………………………………………………………… 159

Глава 7. Выборка данных…………………………………………………………………….. 161

7.1. Извлечение значений из полей записи…………………………………………………………………………….. 161

7.2. Доступ к связанным записям……………………………………………………………………………………………. 161

7.2.1. Связь «один-со-многими»: доступ к связанным записям…………………………………………. 161

7.2.2. Связь «один-с-одним из многих»: доступ к связанным записям……………………………… 162

7.2.3. Связь «один-с-одним»: доступ к связанным записям……………………………………………….. 163

7.2.4. Связь «многие-со-многими»: доступ к связанным записям……………………………………… 163

7.3. Выборка записей: базовые средства………………………………………………………………………………. 164

7.3.1. Выборка всех записей………………………………………………………………………………………………… 164

7.3.2. Извлечение первой записи………………………………………………………………………………………….. 164

7.3.3. Поиск записей……………………………………………………………………………………………………………… 165

7.3.4. Фильтрация записей……………………………………………………………………………………………………. 167

7.3.4.1. Фильтрация записей по значениям полей типа JSON…………………………………….. 172

7.3.4.2. Фильтрация по полнотекстовому индексу………………………………………………………. 173

7.3.5. Сортировка записей……………………………………………………………………………………………………. 174

7.3.6. Выборка указанного количества записей………………………………………………………………… 175

7.3.7. Выборка уникальных записей…………………………………………………………………………………… 175

7.3.8. Задание параметров запросов на основании выполнения указанного условия…… 176

7.3.9. Смена типа выдаваемых значений……………………………………………………………………………. 176

7.3.10. Выполнение запроса и получение результата………………………………………………………. 176

7.3.11. Проверка наличия записей в полученном результате…………………………………………… 177

7.3.12. Объединение результатов от разных запросов……………………………………………………… 177

7.4. Выборка связанных записей……………………………………………………………………………………………. 178

7.5. Выборка записей: расширенные средства……………………………………………………………………… 182

7.5.1. Указание выбираемых полей…………………………………………………………………………………….. 182

7.5.2. Вставка фрагментов SQL-кода в запрос……………………………………………………………………. 183

7.5.3. Связывание таблиц……………………………………………………………………………………………………… 183

7.5.4. Использование вложенных запросов………………………………………………………………………… 186

7.5.5. Использование фасада DB для выборки данных……………………………………………………… 189

7.6. Агрегатные вычисления……………………………………………………………………………………………………. 189

7.6.1. Агрегатные вычисления по всем записям…………………………………………………………………. 189

7.6.2. Агрегатные вычисления по группам записей…………………………………………………………… 190

7.6.3. Агрегатные вычисления по связанным записям……………………………………………………….. 192

7.7. Извлечение «мягко» удаленных записей…………………………………………………………………………. 194

7.8. Сравнение записей……………………………………………………………………………………………………………. 195

7.9. Получение значения заданного поля………………………………………………………………………………. 195

7.10. Повторное считывание записей…………………………………………………………………………………….. 196

Глава 8. Маршрутизация……………………………………………………………………… 197

8.1. Настройки маршрутизатора……………………………………………………………………………………………. 197

8.2. Списки маршрутов……………………………………………………………………………………………………………. 198

8.3. Создание простых маршрутов………………………………………………………………………………………… 198

8.3.1. Специализированные маршруты………………………………………………………………………………. 199

8.3.2. Резервный маршрут…………………………………………………………………………………………………….. 200

8.4. Именованные маршруты………………………………………………………………………………………………….. 200

8.5. URL-параметры и параметризованные маршруты……………………………………………………….. 201

8.5.1. Указание правил для значений URL-параметров……………………………………………………. 202

8.5.2. Внедрение моделей…………………………………………………………………………………………………….. 203

8.5.2.1. Неявное внедрение моделей……………………………………………………………………………… 203

8.5.2.2. Явное внедрение моделей…………………………………………………………………………………. 205

8.5.3. Внедрение перечислений……………………………………………………………………………………………. 207

8.5.4. Значения по умолчанию для URL-параметров………………………………………………………… 207

8.6. Дополнительные параметры маршрутов……………………………………………………………………….. 209

8.7. Группы маршрутов…………………………………………………………………………………………………………… 210

8.8. Маршруты на ресурсные контроллеры………………………………………………………………………….. 211

8.8.1. Маршруты на подчиненные ресурсные контроллеры……………………………………………. 213

8.8.2. Дополнительные параметры маршрутов на ресурсные контроллеры………………….. 213

8.9. Как Laravel обрабатывает списки маршрутов?…………………………………………………………….. 215

8.10. Вывод списка созданных маршрутов…………………………………………………………………………… 215

Глава 9. Контроллеры и действия. Обработка запросов и генерирование ответов            217

9.1. Разновидности контроллеров и особенности работы с ними……………………………………….. 217

9.1.1. Контроллеры-функции……………………………………………………………………………………………….. 217

9.1.2. Контроллеры-классы………………………………………………………………………………………………….. 218

9.1.2.1. Ресурсные контроллеры……………………………………………………………………………………. 218

9.1.2.2. Контроллеры одного действия…………………………………………………………………………. 220

9.1.2.3. Создание контроллеров-классов……………………………………………………………………… 220

9.1.2.4. Связывание посредников с контроллерами…………………………………………………….. 221

9.2. Внедрение зависимостей в контроллерах………………………………………………………………………. 221

9.3. Обработка клиентских запросов……………………………………………………………………………………… 222

9.3.1. Извлечение данных, отправленных посетителем…………………………………………………….. 223

9.3.2. Как узнать, присутствует ли в запросе нужное значение?……………………………………… 225

9.3.3. Добавление в запрос произвольных значений…………………………………………………………. 226

9.3.4. Получение сведений о запросе………………………………………………………………………………….. 227

9.4. Генерирование интернет-адресов…………………………………………………………………………………… 231

9.5. Генерирование серверных ответов…………………………………………………………………………………. 233

9.5.1. Ответы на основе шаблонов………………………………………………………………………………………. 233

9.5.1.1. Ответы в виде объектов класса View……………………………………………………………….. 233

9.5.1.2. Ответы в виде объектов класса Response………………………………………………………… 234

9.5.2. Специальные ответы…………………………………………………………………………………………………… 235

9.5.2.1. Отправка файла для отображения в веб-обозревателе………………………………….. 235

9.5.2.2. Отправка файла для сохранения на локальном диске…………………………………… 235

9.5.2.3. Отправка данных в форматах JSON и JSONP………………………………………………….. 236

9.5.2.4. Текстовый ответ…………………………………………………………………………………………………. 237

9.5.2.5. «Пустой» ответ…………………………………………………………………………………………………… 237

9.5.3. Дополнительные параметры ответов……………………………………………………………………….. 237

9.5.4. Перенаправления………………………………………………………………………………………………………… 238

9.6. Обработка ошибок……………………………………………………………………………………………………………. 240

Глава 10. Обработка введенных данных. Валидация…………………………… 242

10.1. Извлечение введенных данных……………………………………………………………………………………… 242

10.2. Валидация данных…………………………………………………………………………………………………………. 244

10.2.1. Валидаторы………………………………………………………………………………………………………………. 244

10.2.1.1. Быстрая валидация с неявным созданием валидатора……………………………….. 244

10.2.1.2. Валидация с явным созданием валидатора………………………………………………….. 246

10.2.2. Формальные запросы……………………………………………………………………………………………….. 249

10.2.3. Правила валидации и написание их наборов………………………………………………………… 252

10.2.3.1. Валидация паролей…………………………………………………………………………………………. 261

10.2.3.2. Валидация массивов элементов управления………………………………………………… 262

10.2.4. Написание сообщений об ошибках ввода……………………………………………………………… 264

10.2.4.1. Подстановки наименований…………………………………………………………………………… 265

10.2.5. Извлечение ранее введенных данных……………………………………………………………………… 265

10.2.6. Извлечение сообщений об ошибках ввода……………………………………………………………… 266

10.2.7. Создание своих правил валидации…………………………………………………………………………. 267

10.2.7.1. Правила-функции…………………………………………………………………………………………….. 267

10.2.7.2. Правила-расширения………………………………………………………………………………………. 267

10.2.7.3. Правила-объекты…………………………………………………………………………………………….. 268

10.3. Предварительная обработка введенных данных………………………………………………………… 270

10.4. Вывод веб-страниц добавления, правки и удаления записей…………………………………….. 272

Глава 11. Шаблоны: базовые инструменты………………………………………….. 274

11.1. Настройки шаблонизатора……………………………………………………………………………………………. 274

11.2. Директивы шаблонизатора……………………………………………………………………………………………. 275

11.2.1. Директивы вывода данных………………………………………………………………………………………. 275

11.2.1.1. Вывод данных в формате JSON……………………………………………………………………… 276

11.2.2. Управляющие директивы…………………………………………………………………………………………. 276

11.2.2.1. Условные директивы и директивы выбора……………………………………………………. 276

11.2.2.2. Директивы циклов……………………………………………………………………………………………. 278

11.2.3. Прочие директивы…………………………………………………………………………………………………….. 280

11.2.4. Запрет на обработку директив………………………………………………………………………………… 281

11.3. Вывод веб-форм и элементов управления…………………………………………………………………….. 282

11.3.1. Вывод веб-форм………………………………………………………………………………………………………… 282

11.3.2. Вывод элементов управления………………………………………………………………………………….. 283

11.3.3. Вывод сообщений об ошибках ввода……………………………………………………………………… 284

11.4. Наследование шаблонов……………………………………………………………………………………………….. 285

11.5. Стеки………………………………………………………………………………………………………………………………… 288

11.6. Включаемые шаблоны…………………………………………………………………………………………………… 290

11.6.1. Псевдонимы включаемых шаблонов………………………………………………………………………. 291

11.7. Компоненты…………………………………………………………………………………………………………………….. 291

11.7.1. Полнофункциональные компоненты………………………………………………………………………. 292

11.7.1.1. Создание полнофункциональных компонентов…………………………………………… 292

11.7.1.2. Передача данных в компоненты. Атрибуты компонентов………………………….. 295

11.7.1.3. Передача HTML-содержимого в компоненты. Слоты…………………………………. 298

11.7.2. Упрощенные компоненты………………………………………………………………………………………… 299

11.7.2.1. Бесшаблонные компоненты……………………………………………………………………………. 299

11.7.2.2. Бесклассовые компоненты……………………………………………………………………………… 300

11.7.3. Динамический компонент………………………………………………………………………………………… 301

11.8. Передача данных в шаблоны: другие способы…………………………………………………………… 302

11.8.1. Разделяемые значения………………………………………………………………………………………………. 302

11.8.2. Составители значений……………………………………………………………………………………………… 303

11.8.3. Создатели значений………………………………………………………………………………………………….. 304

11.9. Обработка статических файлов…………………………………………………………………………………….. 305

Глава 12. Пагинация……………………………………………………………………………. 307

12.1. Автоматическое создание пагинатора…………………………………………………………………………. 307

12.2. Дополнительные параметры пагинатора…………………………………………………………………….. 310

12.3. Настройка отображения пагинатора……………………………………………………………………………. 311

12.4. Создание пагинатора вручную……………………………………………………………………………………… 314

Глава 13. Разграничение доступа: базовые инструменты…………………….. 316

13.1. Настройки подсистемы разграничения доступа…………………………………………………………. 316

13.2. Создание недостающих модулей, реализующих разграничение доступа……………….. 318

13.3. Маршруты, ведущие на контроллеры разграничения доступа…………………………………. 319

13.4. Служебные таблицы и модель………………………………………………………………………………………. 321

13.5. Регистрация новых пользователей………………………………………………………………………………… 322

13.6. Вход на веб-сайт…………………………………………………………………………………………………………….. 325

13.7. Раздел пользователя……………………………………………………………………………………………………….. 327

13.8. Собственно разграничение доступа……………………………………………………………………………… 327

13.8.1. Разграничение доступа: простейшие инструменты………………………………………………. 327

13.8.1.1. Разграничение доступа с помощью посредников………………………………………… 327

13.8.1.2. Разграничение доступа в шаблонах……………………………………………………………… 328

13.8.2. Гейты………………………………………………………………………………………………………………………….. 329

13.8.2.1. Написание гейтов……………………………………………………………………………………………. 329

13.8.2.2. Разграничение доступа посредством гейтов………………………………………………… 330

13.8.2.3. Перехватчики…………………………………………………………………………………………………… 332

13.8.2.4. Гейты с развернутыми ответами……………………………………………………………………. 333

13.8.2.5. Простые гейты…………………………………………………………………………………………………. 334

13.8.3. Политики……………………………………………………………………………………………………………………. 335

13.8.3.1. Создание и регистрация политик…………………………………………………………………… 335

13.8.3.2. Разграничение доступа посредством политик……………………………………………… 338

13.8.3.3. Разграничение доступа в ресурсных контроллерах……………………………………. 341

13.8.4. Разграничение доступа с помощью формальных запросов………………………………….. 341

13.9. Получение сведений о текущем пользователе……………………………………………………………… 342

13.10. Подтверждение пароля………………………………………………………………………………………………… 343

13.11. Выход с веб-сайта………………………………………………………………………………………………………… 344

13.12. Проверка существования адреса электронной почты………………………………………………. 344

13.13. Сброс пароля………………………………………………………………………………………………………………… 347

13.13.1. Отправка электронного письма с гиперссылкой сброса пароля………………………… 347

13.13.2. Собственно сброс пароля………………………………………………………………………………………. 348

13.13.3. Удаление устаревших жетонов сброса пароля……………………………………………………. 349

Глава 14. Обработка строк, массивов и функции-хелперы…………………… 350

14.1. Обработка строк……………………………………………………………………………………………………………… 350

14.1.1. Составление строк……………………………………………………………………………………………………. 351

14.1.2. Сравнение строк и получение сведений о строках………………………………………………… 352

14.1.3. Преобразование строк……………………………………………………………………………………………… 353

14.1.4. Извлечение фрагментов строк………………………………………………………………………………….. 358

14.1.5. Поиск и замена в строках…………………………………………………………………………………………. 360

14.1.6. Обработка путей к файлам………………………………………………………………………………………. 364

14.1.7. Прочие инструменты для обработки строк……………………………………………………………. 365

14.2. Обработка массивов……………………………………………………………………………………………………….. 367

14.2.1. Добавление, правка и удаление элементов массивов……………………………………………. 367

14.2.2. Извлечение элементов массива……………………………………………………………………………….. 369

14.2.3. Проверка существования элементов массивов………………………………………………………. 371

14.2.4. Получение сведений о массиве………………………………………………………………………………… 372

14.2.5. Упорядочивание элементов массивов…………………………………………………………………….. 373

14.2.6. Прочие инструменты для обработки массивов……………………………………………………… 373

14.3. Функции-хелперы……………………………………………………………………………………………………………. 375

14.3.1. Функции, выдающие пути к ключевым папкам……………………………………………………… 376

14.3.2. Служебные функции…………………………………………………………………………………………………. 376

Глава 15. Коллекции Laravel……………………………………………………………….. 380

15.1. Обычные коллекции……………………………………………………………………………………………………….. 380

15.1.1. Создание обычных коллекций…………………………………………………………………………………. 380

15.1.2. Добавление, правка и удаление элементов коллекции…………………………………………. 381

15.1.3. Извлечение отдельных элементов и частей коллекции…………………………………………. 383

15.1.4. Получение сведений об элементах коллекции……………………………………………………….. 389

15.1.5. Перебор элементов коллекции…………………………………………………………………………………. 390

15.1.6. Поиск и фильтрация элементов коллекции…………………………………………………………….. 391

15.1.7. Упорядочивание элементов коллекции…………………………………………………………………… 396

15.1.8. Группировка элементов коллекций…………………………………………………………………………. 398

15.1.9. Агрегатные вычисления в коллекциях…………………………………………………………………….. 399

15.1.10. Получение сведений о коллекции………………………………………………………………………….. 400

15.1.11. Прочие инструменты для обработки коллекций………………………………………………….. 401

15.2. Коллекции, заполняемые по запросу……………………………………………………………………………. 406

15.2.1. Создание коллекций, заполняемых по запросу……………………………………………………… 406

15.2.2. Работа с коллекциями, заполняемыми по запросу………………………………………………… 406

Часть III. Расширенные инструменты
и дополнительные библиотеки…………………………………………….. 409

Глава 16. Базы данных и модели: расширенные инструменты…………….. 411

16.1. Отложенная и немедленная выборка связанных записей…………………………………………… 411

16.2. Выборка наборов записей по частям……………………………………………………………………………. 413

16.3. Фильтрующие связи «многие-со-многими»…………………………………………………………………… 415

16.4. Полиморфные связи………………………………………………………………………………………………………… 417

16.4.1. Создание поля внешнего ключа для полиморфной связи……………………………………… 417

16.4.2. Создание полиморфных связей……………………………………………………………………………….. 418

16.4.2.1. Полиморфная связь «один-со-многими»………………………………………………………… 418

16.4.2.2. Полиморфная связь «один-с-одним из многих»…………………………………………….. 420

16.4.2.3. Полиморфная связь «один-с-одним»………………………………………………………………. 420

16.4.2.4. Полиморфная связь «многие-со-многими»…………………………………………………….. 421

16.4.3. Работа с записями, связанными полиморфной связью………………………………………….. 423

16.4.4. Указание своих типов связываемых записей………………………………………………………….. 424

16.5. Пределы…………………………………………………………………………………………………………………………… 426

16.5.1. Локальные пределы………………………………………………………………………………………………….. 426

16.5.2. Глобальные пределы………………………………………………………………………………………………… 427

16.6. Выполнение «сырых» SQL-запросов…………………………………………………………………………….. 429

16.6.1. «Сырые» вызовы функций СУБД…………………………………………………………………………….. 429

16.6.2. «Сырые» команды SQL…………………………………………………………………………………………….. 429

16.5.3. «Сырые» SQL-запросы целиком………………………………………………………………………………. 431

16.7. Блокировка записей………………………………………………………………………………………………………… 432

16.8. Управление транзакциями……………………………………………………………………………………………… 432

16.8.1. Автоматическое управление транзакциями…………………………………………………………… 433

16.8.2. Ручное управление транзакциями…………………………………………………………………………… 433

16.9. Очистка моделей…………………………………………………………………………………………………………….. 433

Глава 17. Шаблоны: расширенные инструменты
и дополнительные библиотеки…………………………………………………………….. 436

17.1. Библиотека Laravel HTML: создание веб-форм и элементов управления………………… 436

17.1.1. Создание элементов управления…………………………………………………………………………….. 436

17.1.2. Создание веб-форм……………………………………………………………………………………………………. 439

17.1.3. Создание гиперссылок……………………………………………………………………………………………… 441

17.2. Библиотека genert/bbcode: поддержка BBCode…………………………………………………………… 443

17.2.1. Использование библиотеки genert/bbcode………………………………………………………………. 443

17.2.2. Поддерживаемые BBCode-теги……………………………………………………………………………….. 444

17.2.3. Добавление своих BBCode-тегов…………………………………………………………………………….. 445

17.3. Библиотека Captcha for Laravel: поддержка CAPTCHA…………………………………………….. 446

17.3.1. Настройка Captcha for Laravel………………………………………………………………………………… 447

17.3.2. Использование Captcha for Laravel…………………………………………………………………………. 448

17.4. Написание своих директив шаблонизатора………………………………………………………………… 449

17.4.1. Написание простейших директив……………………………………………………………………………. 450

17.4.1.1. Форматировщики объектов…………………………………………………………………………….. 451

17.4.2. Написание условных директив……………………………………………………………………………….. 451

17.5. Пакет Laravel Mix……………………………………………………………………………………………………………. 452

17.5.1. Исходные файлы и их расположение……………………………………………………………………… 453

17.5.2. Конфигурирование Laravel Mix………………………………………………………………………………. 453

17.5.2.1. Обработка таблиц стилей………………………………………………………………………………. 454

17.5.2.2. Обработка веб-сценариев……………………………………………………………………………….. 455

17.5.2.3. Копирование файлов и папок…………………………………………………………………………. 456

17.5.2.4. Мечение файлов………………………………………………………………………………………………. 457

17.5.3. Запуск Laravel Mix……………………………………………………………………………………………………. 458

17.6. Использование Bootstrap……………………………………………………………………………………………….. 459

Глава 18. Обработка выгруженных файлов…………………………………………. 461

18.1. Настройки подсистемы обработки выгруженных файлов………………………………………….. 461

18.2. Создание символических ссылок на папки с выгруженными файлами…………………….. 464

18.3. Хранение выгруженных файлов……………………………………………………………………………………. 465

18.4. Базовые средства для обработки выгруженных файлов…………………………………………….. 465

18.4.1. Валидаторы для выгруженных файлов………………………………………………………………….. 465

18.4.2. Получение выгруженных файлов……………………………………………………………………………. 467

18.4.3. Получение сведений о выгруженных файлах………………………………………………………… 467

18.4.4. Сохранение выгруженных файлов………………………………………………………………………….. 468

18.4.5. Выдача выгруженных файлов посетителям…………………………………………………………… 470

18.4.5.1. Вывод выгруженных файлов………………………………………………………………………….. 470

18.4.5.2. Реализация загрузки выгруженного файла…………………………………………………… 471

18.4.6. Удаление выгруженных файлов………………………………………………………………………………. 472

18.5. Расширенные средства для работы с выгруженными файлами…………………………………. 472

18.5.1. Чтение из файлов и запись в них……………………………………………………………………………… 473

18.5.2. Получение сведений о файле…………………………………………………………………………………… 473

18.5.3. Прочие манипуляции с файлами……………………………………………………………………………… 474

18.5.4. Работа с папками………………………………………………………………………………………………………. 475

18.6. Библиотека bkwld/croppa: вывод миниатюр………………………………………………………………… 475

18.6.1. Настройки библиотеки bkwld/croppa……………………………………………………………………… 476

18.6.2. Использование библиотеки bkwld/croppa………………………………………………………………. 478

18.6.3. Удаление миниатюр…………………………………………………………………………………………………. 481

Глава 19. Безопасность и разграничение доступа:
расширенные инструменты и дополнительная библиотека………………….. 482

19.1. Низкоуровневые средства для работы с пользователями…………………………………………… 482

19.1.1. Низкоуровневые средства для регистрации пользователей…………………………………. 482

19.1.2. Низкоуровневые средства для входа………………………………………………………………………. 483

19.1.3. Низкоуровневые средства для выполнения выхода………………………………………………. 485

19.1.4. Низкоуровневые средства для подтверждения пароля…………………………………………. 485

19.1.5. Низкоуровневые средства для проверки существования адреса
электронной почты……………………………………………………………………………………………………………….. 486

19.1.6. Низкоуровневые средства для сброса пароля……………………………………………………….. 487

19.1.7. Корректная правка пароля………………………………………………………………………………………. 490

19.2. Библиотека Laravel Socialite: вход через сторонние интернет-службы…………………….. 491

19.2.1. Создание приложения «ВКонтакте»……………………………………………………………………….. 491

19.2.2. Установка и настройка Laravel Socialite…………………………………………………………………. 493

19.2.3. Использование Laravel Socialite………………………………………………………………………………. 494

19.2.3.1. Действие первое: обращение к сторонней интернет-службе………………………. 495

19.2.3.2. Действие второе: поиск (регистрация) пользователя и вход……………………….. 495

19.2.3.3. Завершающие операции: создание маршрутов и гиперссылки входа……….. 496

19.3. Защита от атак CSRF……………………………………………………………………………………………………… 497

19.4. Ограничители частоты запросов…………………………………………………………………………………… 498

19.4.1. Простейшие ограничители частоты запросов……………………………………………………….. 498

19.4.2. Именованные ограничители частоты запросов…………………………………………………….. 499

19.4.3. Низкоуровневые ограничители частоты запросов………………………………………………… 501

Глава 20. Внедрение зависимостей, провайдеры и фасады…………………… 504

20.1. Внедрение зависимостей………………………………………………………………………………………………… 504

20.1.1. Простейшие случаи внедрения зависимостей………………………………………………………… 504

20.1.2. Управление внедрением зависимостей…………………………………………………………………… 506

20.1.2.1. Простая регистрация классов и объектов……………………………………………………… 506

20.1.2.2. Подмена классов и реализации……………………………………………………………………… 509

20.1.2.3. Гибкая подмена классов и реализации…………………………………………………………. 510

20.1.2.4. Гибкая регистрация значений произвольного типа……………………………………… 511

20.1.2.5. Переопределение регистрации………………………………………………………………………. 512

20.1.2.6. Вызов методов и функций, в которых используется внедрение зависимостей 512

20.1.2.7. Подмена методов…………………………………………………………………………………………….. 514

20.2. Провайдеры…………………………………………………………………………………………………………………….. 515

20.2.1. Список провайдеров, используемых веб-сайтом…………………………………………………… 515

20.2.2. Создание своих провайдеров…………………………………………………………………………………… 517

20.3. Фасады…………………………………………………………………………………………………………………………….. 518

Глава 21. Посредники………………………………………………………………………….. 520

21.1. Посредники, используемые веб-сайтом………………………………………………………………………… 520

21.1.1. Управление очередностью выполнения посредников…………………………………………… 523

21.1.2. Параметры посредников………………………………………………………………………………………….. 523

21.2. Написание своих посредников………………………………………………………………………………………. 523

21.2.1. Как исполняется посредник?……………………………………………………………………………………. 523

21.2.2. Создание посредников……………………………………………………………………………………………… 524

21.2.3. Посредники с завершающими действиями……………………………………………………………… 526

 

Глава 22. События и их обработка……………………………………………………….. 528

22.1. События-классы……………………………………………………………………………………………………………… 528

22.1.1. Обработка событий-классов: слушатели……………………………………………………………….. 528

22.1.1.1. Создание слушателей-классов………………………………………………………………………. 528

22.1.1.2. Явная привязка слушателей-классов к событиям………………………………………… 530

22.1.1.3. Автоматическая привязка слушателей-классов к событиям……………………….. 531

22.1.1.4. Слушатели-функции……………………………………………………………………………………….. 532

22.1.1.5. Просмотр списков слушателей, привязанных к событиям-классам…………… 532

22.1.2. Обработка событий-классов: подписчики……………………………………………………………… 533

22.1.3. События-классы, поддерживаемые фреймворком…………………………………………………. 534

22.1.3.1. События подсистемы разграничения доступа……………………………………………… 534

22.1.3.2. События других подсистем…………………………………………………………………………….. 536

22.1.4. Создание и использование своих событий-классов………………………………………………. 536

22.1.4.1. Создание событий-классов…………………………………………………………………………….. 536

22.1.4.2. Создание событий-классов и их слушателей……………………………………………….. 537

22.1.4.3. Генерирование своих событий………………………………………………………………………. 538

22.2. События-строки………………………………………………………………………………………………………………. 538

22.2.1. Привязка обработчиков к событиям-строкам………………………………………………………… 539

22.2.2. Генерирование событий-строк………………………………………………………………………………… 539

22.3. События моделей……………………………………………………………………………………………………………. 540

22.3.1. Обработка событий моделей…………………………………………………………………………………… 540

22.3.1.1. Обработка событий моделей посредством слушателей-функций………………. 540

22.3.1.2. Связывание событий моделей с событиями-классами…………………………………. 540

22.3.1.3. Использование обозревателей……………………………………………………………………….. 541

22.3.2. Список событий моделей…………………………………………………………………………………………. 542

22.3.3. Временное отключение событий в моделях…………………………………………………………… 543

Глава 23. Отправка электронной почты………………………………………………. 544

23.1. Настройки подсистемы отправки электронной почты……………………………………………….. 544

23.2. Создание электронных писем………………………………………………………………………………………… 547

23.2.1. Создание классов электронных писем……………………………………………………………………. 547

23.2.2. Генерирование электронных писем………………………………………………………………………… 548

23.2.3. Написание шаблонов электронных писем……………………………………………………………… 551

23.2.4. Написание электронных писем на языке Markdown……………………………………………… 552

23.2.4.1. Классы писем, написанных на Markdown…………………………………………………….. 552

23.2.4.2. Написание шаблонов писем на Markdown…………………………………………………… 552

23.2.4.3. Управление генерированием писем, написанных на Markdown………………… 553

23.3. Отправка электронных писем………………………………………………………………………………………… 555

23.4. Предварительный просмотр электронных писем………………………………………………………… 556

23.5. События, генерируемые при отправке электронных писем………………………………………… 557

23.6. Доступ к письмам, отправленным посредством службы array…………………………………… 557

Глава 24. Оповещения…………………………………………………………………………. 558

24.1. Создание оповещений…………………………………………………………………………………………………….. 558

24.2. Написание оповещений………………………………………………………………………………………………….. 560

24.2.1. Почтовые оповещения………………………………………………………………………………………………. 560

24.2.1.1. Генерирование простых почтовых оповещений………………………………………….. 560

24.2.1.2. Генерирование почтовых оповещений на основе текстовых
и HTML-шаблонов…………………………………………………………………………………………………………. 562

24.2.1.3. Генерирование почтовых оповещений на основе Markdown-шаблонов…… 562

24.2.1.4. Указание адреса получателя…………………………………………………………………………. 563

24.2.2. SMS-оповещения……………………………………………………………………………………………………….. 563

24.2.2.1. Подготовительные действия и настройка службы SMS-оповещений………… 563

24.2.2.2. Генерирование произвольных SMS-оповещений…………………………………………. 564

24.2.2.3. Указание телефона получателя……………………………………………………………………… 565

24.2.3. Slack-оповещения……………………………………………………………………………………………………… 565

24.2.3.1. Генерирование Slack-оповещений…………………………………………………………………. 565

24.2.3.2. Добавление вложений…………………………………………………………………………………….. 566

24.2.3.3. Указание интернет-адреса получателя…………………………………………………………. 568

24.2.4. Табличные оповещения……………………………………………………………………………………………. 568

24.2.4.1. Создание таблицы для хранения табличных оповещений………………………….. 568

24.2.4.2. Генерирование табличных оповещений……………………………………………………….. 569

24.2.5. Оповещения, отправляемые по нескольким каналам…………………………………………….. 570

24.3. Отправка оповещений…………………………………………………………………………………………………….. 570

24.3.1. Отправка оповещений произвольным получателям……………………………………………… 571

24.4. Предварительный просмотр почтовых оповещений…………………………………………………… 571

24.5. Работа с табличными оповещениями……………………………………………………………………………. 571

24.6. События, генерируемые при отправке оповещений…………………………………………………….. 573

Глава 25. Очереди и отложенные задания……………………………………………. 574

25.1. Настройка подсистемы очередей………………………………………………………………………………….. 574

25.1.1. Настройка самих очередей……………………………………………………………………………………… 574

25.1.2. Подготовка таблиц для хранения отложенных заданий………………………………………. 577

25.1.3. Настройка баз данных Redis……………………………………………………………………………………. 578

25.2. Отложенные задания-классы…………………………………………………………………………………………. 579

25.2.1. Создание отложенных заданий-классов………………………………………………………………… 579

25.2.1.1. Создание отложенных заданий-классов: базовые инструменты……………….. 579

25.2.1.2. Параметры отложенных заданий-классов……………………………………………………. 581

25.2.1.3. Обработка ошибок в отложенных заданиях-классах………………………………….. 583

25.2.1.4. Взаимодействие с очередью…………………………………………………………………………… 584

25.2.1.5. Уникальные задания……………………………………………………………………………………….. 584

25.2.1.6. Неотложные задания………………………………………………………………………………………. 586

25.2.2. Запуск отложенных заданий-классов…………………………………………………………………….. 586

25.3. Отложенные задания-функции………………………………………………………………………………………. 587

25.4. Цепочки отложенных заданий………………………………………………………………………………………. 588

25.5. Специфические разновидности отложенных заданий………………………………………………… 589

25.5.1. Отложенные слушатели событий……………………………………………………………………………. 589

25.5.2. Отложенные электронные письма…………………………………………………………………………… 591

25.5.3. Отложенные оповещения…………………………………………………………………………………………. 593

25.6. Выполнение отложенных заданий………………………………………………………………………………… 594

25.6.1. Запуск обработчика отложенных заданий…………………………………………………………….. 594

25.6.2. Работа с проваленными заданиями………………………………………………………………………… 596

25.6.3. Очистка очереди заданий………………………………………………………………………………………… 597

25.7. Пакеты отложенных заданий………………………………………………………………………………………… 597

25.7.1. Подготовка таблицы для хранения пакетов отложенных заданий……………………… 598

25.7.2. Создание отложенных заданий, пригодных для использования в пакетах………… 598

25.7.3. Создание и запуск пакетов отложенных заданий………………………………………………….. 598

25.7.4. Взаимодействие с выполняющимся пакетом………………………………………………………….. 600

25.7.5. Получение сведений о пакете………………………………………………………………………………….. 601

25.7.6. Выполнение пакетов отложенных заданий……………………………………………………………. 602

25.8. Посредники отложенных заданий…………………………………………………………………………………. 603

25.8.1. Ограничение частоты выполнения заданий…………………………………………………………… 603

25.8.2. Предотвращение наложения заданий…………………………………………………………………….. 604

25.8.3. Отложенное выполнение ошибочных заданий………………………………………………………. 605

25.9. События, генерируемые при выполнении отложенных заданий……………………………….. 607

Глава 26. Cookie, сессии, всплывающие сообщения и криптография…… 609

26.1. Cookie………………………………………………………………………………………………………………………………. 609

26.1.1. Настройки cookie………………………………………………………………………………………………………. 609

26.1.2. Создание cookie………………………………………………………………………………………………………… 609

26.1.3. Считывание cookie……………………………………………………………………………………………………. 611

26.1.4. Удаление cookie………………………………………………………………………………………………………… 612

26.2. Сессии………………………………………………………………………………………………………………………………. 612

26.2.1. Подготовка к работе с сессиями………………………………………………………………………………. 613

26.2.1.1. Настройки сессий……………………………………………………………………………………………. 613

26.2.1.2. Создание таблицы для хранения сессий……………………………………………………….. 614

26.2.2. Работа с сессиями……………………………………………………………………………………………………… 615

26.2.2.1. Запись данных в сессию и их изменение……………………………………………………….. 615

26.2.2.2. Чтение данных из сессии………………………………………………………………………………… 616

26.2.2.3. Удаление данных из сессии……………………………………………………………………………. 616

26.2.2.4. Блокировка сессий…………………………………………………………………………………………… 617

26.2.2.5. Предотвращение сетевых атак на сессии……………………………………………………… 617

26.3. Всплывающие сообщения……………………………………………………………………………………………… 618

26.4. Криптография………………………………………………………………………………………………………………….. 619

26.4.1. Шифрование данных………………………………………………………………………………………………… 619

26.4.2. Хеширование и сверка паролей………………………………………………………………………………. 620

26.4.2.1. Настройки хеширования………………………………………………………………………………… 620

26.4.2.2. Хеширование и сверка…………………………………………………………………………………….. 620

26.4.3. Генерирование подписанных интернет-адресов…………………………………………………… 621

Глава 27. Планировщик заданий…………………………………………………………. 624

27.1. Создание заданий планировщика…………………………………………………………………………………. 624

27.1.1. Как пишутся задания планировщика?……………………………………………………………………. 624

27.1.2. Параметры заданий планировщика………………………………………………………………………… 626

27.1.2.1. Расписание запуска заданий………………………………………………………………………….. 626

27.1.2.2. Дополнительные параметры заданий…………………………………………………………… 628

27.1.3. Обработка вывода, генерируемого заданиями планировщика…………………………….. 630

27.1.4. Исполнение указанного кода перед выполнением задания и после него……………. 631

27.1.5. Отправка сигналов по указанным интернет-адресам……………………………………………. 631

27.2. Работа с заданиями планировщика………………………………………………………………………………. 632

27.2.1. Запуск планировщика заданий……………………………………………………………………………….. 632

27.2.1.1. Запуск с использованием штатного планировщика
операционной системы………………………………………………………………………………………………….. 632

27.2.1.2. Запуск в независимом режиме………………………………………………………………………… 634

27.2.2. Вывод списка заданий планировщика……………………………………………………………………. 634

27.2.3. Удаление распределенных блокировок………………………………………………………………….. 635

27.3. События, генерируемые при выполнении заданий планировщика……………………………. 635

Глава 28. Локализация…………………………………………………………………………. 636

28.1. Быстрая локализация……………………………………………………………………………………………………… 636

28.2. Локализация с применением обозначений…………………………………………………………………… 637

28.2.1. Подстановка параметров в переведенные строки…………………………………………………. 639

28.2.2. Вывод существительных во множественном числе……………………………………………….. 639

28.2.3. Локализация сообщений об ошибках ввода…………………………………………………………… 641

28.3. Реализация переключения на другой язык…………………………………………………………………… 642

28.4. Библиотека Laravel Lang: локализация на множество языков…………………………………… 644

Глава 29. Кеширование………………………………………………………………………… 646

29.1. Кеширование на стороне сервера…………………………………………………………………………………. 646

29.1.1. Подготовка подсистемы кеширования……………………………………………………………………. 646

29.1.1.1. Настройка подсистемы кеширования……………………………………………………………. 646

29.1.1.2. Создание таблицы для хранения кеша………………………………………………………….. 648

29.1.2. Работа с кешем стороны сервера…………………………………………………………………………….. 649

29.1.2.1. Сохранение данных в кеше и их правка……………………………………………………….. 649

29.1.2.2. Чтение данных из кеша…………………………………………………………………………………… 650

29.1.2.3. Удаление данных из кеша………………………………………………………………………………. 651

29.1.3. Распределенные блокировки……………………………………………………………………………………. 652

29.1.3.1. Немедленные распределенные блокировки………………………………………………….. 652

29.1.3.2. Распределенные блокировки с ожиданием…………………………………………………… 654

29.1.3.3. Передача распределенных блокировок между процессами……………………….. 655

29.1.4. События, генерируемые кешем………………………………………………………………………………… 656

29.2. Кеширование на стороне клиента…………………………………………………………………………………. 657

Глава 30. Разработка веб-служб……………………………………………………………. 658

30.1. Бэкенды: преобразование данных — базовые инструменты……………………………………… 658

30.1.1. Выдача данных в формате JSON…………………………………………………………………………….. 659

30.1.2. Задание структуры генерируемых JSON-объектов……………………………………………….. 661

30.2. Бэкенды: преобразование данных — ресурсы и ресурсные коллекции……………………. 664

30.2.1. Ресурсы………………………………………………………………………………………………………………………. 664

30.2.1.1. Написание ресурсов……………………………………………………………………………………….. 664

30.2.1.2. Задание структуры JSON-объектов, генерируемых ресурсами………………….. 665

30.2.1.3. Дополнительные параметры ресурсов………………………………………………………….. 668

30.2.1.4. Использование ресурсов…………………………………………………………………………………. 669

30.2.2. Ресурсные коллекции……………………………………………………………………………………………….. 670

30.2.2.1. Быстрое JSON-кодирование коллекции записей…………………………………………… 670

30.2.2.2. Написание ресурсных коллекций………………………………………………………………….. 670

30.2.2.3. Пагинация в ресурсных коллекциях………………………………………………………………. 673

30.3. Бэкенды: обработка данных………………………………………………………………………………………….. 674

30.3.1. Выдача записей………………………………………………………………………………………………………… 674

30.3.2. Добавление, правка и удаление записей………………………………………………………………… 674

30.3.3. Совмещенная обработка данных……………………………………………………………………………. 676

30.4. Бэкенды: разграничение доступа………………………………………………………………………………….. 676

30.5. Фронтенды: взаимодействие с бэкендами……………………………………………………………………. 679

30.6. Фронтенды: использование React и Vue………………………………………………………………………. 681

Глава 31. Вещание……………………………………………………………………………….. 683

31.1. Бэкенд: подготовка подсистемы вещания…………………………………………………………………….. 683

31.1.1. Настройка подсистемы вещания…………………………………………………………………………….. 683

31.1.2. Подготовка проекта к реализации вещания…………………………………………………………… 685

31.1.3. Установка и настройка Laravel Websockets…………………………………………………………… 685

31.2. Бэкенд: вещаемые события и оповещения……………………………………………………………………. 687

31.2.1. Вещаемые события…………………………………………………………………………………………………… 687

31.2.1.1. Вещаемые события моделей…………………………………………………………………………… 690

31.2.2. Вещаемые оповещения…………………………………………………………………………………………….. 693

31.3. Бэкенд: каналы вещания………………………………………………………………………………………………… 695

31.3.1. Общедоступные каналы вещания……………………………………………………………………………. 695

31.3.2. Закрытые каналы вещания………………………………………………………………………………………. 695

31.3.3. Каналы присутствия…………………………………………………………………………………………………. 697

31.4. Фронтенд: прослушивание каналов вещания………………………………………………………………. 699

31.4.1. Использование Laravel Echo……………………………………………………………………………………. 699

31.4.2. Прослушивание общедоступных каналов……………………………………………………………… 701

31.4.3. Прослушивание закрытых каналов………………………………………………………………………… 703

31.4.4. Прослушивание каналов присутствия……………………………………………………………………. 703

31.4.5. Отправка произвольных уведомлений……………………………………………………………………. 704

31.5. Запуск вещания……………………………………………………………………………………………………………….. 705

Глава 32. Команды утилиты artisan……………………………………………………… 706

32.1. Получение сведений о командах утилиты artisan……………………………………………………….. 706

32.2. Команды-классы…………………………………………………………………………………………………………….. 707

32.2.1. Создание команд-классов………………………………………………………………………………………… 707

32.2.2. Описание формата вызова команд………………………………………………………………………….. 709

32.2.3. Получение значений аргументов…………………………………………………………………………….. 711

32.2.4. Получение данных от пользователя……………………………………………………………………….. 712

32.2.5. Вывод данных…………………………………………………………………………………………………………… 713

32.2.5.1. Вывод индикатора процесса………………………………………………………………………….. 714

32.2.6. Вызов из команды других команд…………………………………………………………………………… 715

32.2.7. Регистрация команд-классов……………………………………………………………………………………. 716

32.3. Команды-функции…………………………………………………………………………………………………………… 716

32.4. Программный вызов команд………………………………………………………………………………………….. 718

32.5. События утилиты artisan………………………………………………………………………………………………… 718

Глава 33. Обработка ошибок……………………………………………………………….. 719

33.1. Настройка веб-страниц с сообщениями об ошибках………………………………………………….. 719

33.2. Создание и использование своих исключений…………………………………………………………….. 720

33.2.1. Создание своих исключений……………………………………………………………………………………. 720

33.2.2. Возбуждение своих исключений……………………………………………………………………………… 722

33.3. Настройка обработки существующих исключений……………………………………………………. 723

33.4. Подавление исключений………………………………………………………………………………………………… 725

Глава 34. Журналирование и дополнительные средства отладки…………. 728

34.1. Подсистема журналирования………………………………………………………………………………………… 728

34.1.1. Настройка подсистемы журналирования………………………………………………………………. 728

34.1.2. Занесение записей в журнал……………………………………………………………………………………. 731

34.1.2.1. Разделяемая дополнительная информация…………………………………………………… 732

34.1.3. Событие, генерируемое при занесении записи в журнал……………………………………… 733

34.2. Дополнительные средства отладки………………………………………………………………………………. 733

Глава 35. Публикация веб-сайта………………………………………………………….. 735

35.1. Подготовка веб-сайта к публикации…………………………………………………………………………….. 735

35.1.1. Удаление ненужного кода и данных………………………………………………………………………. 735

35.1.2. Настройка под платформу публикации…………………………………………………………………. 736

35.1.3. Переключение в режим эксплуатации…………………………………………………………………….. 736

35.1.4. Задание списка доверенных прокси-серверов……………………………………………………….. 736

35.1.5. Задание списка доверенных хостов………………………………………………………………………… 737

35.1.6. Компиляция шаблонов……………………………………………………………………………………………… 738

35.1.7. Кеширование маршрутов…………………………………………………………………………………………. 738

35.1.8. Кеширование настроек…………………………………………………………………………………………….. 739

35.1.9. Кеширование обработчиков событий…………………………………………………………………….. 739

35.1.10. Приведение таблиц стилей и веб-сценариев к виду,
оптимальному для публикации…………………………………………………………………………………………… 740

35.2. Перенос веб-сайта на платформу для публикации……………………………………………………… 740

35.3. Настройка веб-сервера и запуск сторонних программ……………………………………………….. 741

35.4. Режим обслуживания……………………………………………………………………………………………………… 741

Заключение………………………………………………………………………………………….. 744

Приложение. Описание электронного архива………………………………………. 746

Предметный указатель…………………………………………………………………………. 747

Опубликовано

Представляем книгу React. Сборник рецептов

React. Сборник рецептов

Представляем книгу “React. Сборник рецептов“.

Книга посвящена практическому применению фреймворка React. Описано создание простых приложений и приложений со сложным интерфейсом, рассмотрены вопросы маршрутизации в приложениях и управление их состоянием. Даны примеры реализации интерактивного взаимодействия с пользователем, подключения к различным службам бэкенда, таким как REST и GraphQL, описана работа с библиотеками компонентов. Подробно рассматривается безопасность приложений, процесс их тестирования, даны советы по обеспечению доступности. Приводятся практические рекомендации по повышению производительности и созданию прогрессивных веб-приложений.

Фреймворк React поможет вам создать работоспособное приложение всего за несколько минут. Но научиться использовать составляющие React — работа не из легких. Как выполнить валидацию формы? Или реализовать сложное многошаговое действие пользователя, избежав создания запутанного кода? Как протестировать приложение? Приспособить его для многократного использования? Подключить его к бэкенду? Сделать его легким для понимания? Данная книга дает быстрые ответы на эти и другие вопросы.

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

Вы научитесь:

• Создавать одностраничные приложения в React, использующие сложный пользовательский интерфейс
• Создавать прогрессивные веб-приложения, которые пользователи могут устанавливать на своем устройстве и работать с ними в автономном режиме
• Интегрировать разрабатываемые приложения со службами бэкенда, такими как REST и GraphQL
• Выполнять автоматическое тестирование для обнаружения проблем с доступностью в разрабатываемом приложении
• Обеспечивать безопасность приложений при помощи цифровых отпечатков и ключей безопасности с применением технологии WebAuthn
• Исправлять ошибки и избегать распространенных проблем с функциональностью и производительностью

Книга проводит читателя через полный жизненный цикл разработки приложений React. Каждый рецепт — это краткий, легко усваиваемый комплекс знаний. Книга обязательна для прочтения всем разработчикам!
Сэм Уорнер, инженер-программист

Dawn Griffiths

Дон Гриффитс — автор и преподаватель с более чем 20-летним опытом разработки программного обеспечения для настольных компьютеров и Интернета.

Вместе Дэвид и Дон написали несколько книг, включая Head First Android Development и Head First Kotlin. Также они проводят он-лайн консультации для компании O’Reilly.

David Griffiths

Дэвид Гриффитс — автор и преподаватель, занимается разработкой кода в React на профессиональном уровне в течение 5 лет. Создавал приложения для стартапов, магазинов розничной торговли, производителей транспортных средств, национальных спортивных команд и крупных поставщиков программного обеспечения.

Книгу “React. Сборник рецептов” можно купить со скидкой в интернет-магазине издательства “БХВ”.

Введение………………………………………………………………………………………………… 13

Типографские соглашения………………………………………………………………………………………………………… 15

Использование примеров кода…………………………………………………………………………………………………. 15

Возможности онлайнового обучения от компании O’Reilly…………………………………………………… 16

Как связаться с нами………………………………………………………………………………………………………………….. 16

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

Глава 1. Создание приложений………………………………………………………………. 19

1.1. Создаем простое приложение……………………………………………………………………………………………. 19

ЗАДАЧА……………………………………………………………………………………………………………………………….. 19

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 19

Обсуждение………………………………………………………………………………………………………………………….. 23

1.2. Создание приложений с обширным информационным наполнением
посредством Gatsby…………………………………………………………………………………………………………….. 24

ЗАДАЧА……………………………………………………………………………………………………………………………….. 24

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 24

Обсуждение………………………………………………………………………………………………………………………….. 27

1.3. Создание универсальных приложений с помощью Razzle……………………………………………… 28

ЗАДАЧА……………………………………………………………………………………………………………………………….. 28

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 28

Обсуждение………………………………………………………………………………………………………………………….. 30

1.4. Создание серверного и клиентского кода посредством Next.js………………………………………. 30

ЗАДАЧА……………………………………………………………………………………………………………………………….. 30

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 31

Обсуждение………………………………………………………………………………………………………………………….. 32

1.5. Создание крошечных приложений посредством Preact………………………………………………….. 33

ЗАДАЧА……………………………………………………………………………………………………………………………….. 33

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 33

Обсуждение………………………………………………………………………………………………………………………….. 36

1.6. Создание библиотек посредством набора инструментов nwb……………………………………….. 37

ЗАДАЧА……………………………………………………………………………………………………………………………….. 37

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 37

Обсуждение………………………………………………………………………………………………………………………….. 39

1.7. Добавление React в код Rails посредством Webpacker……………………………………………………. 39

ЗАДАЧА……………………………………………………………………………………………………………………………….. 39

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 39

Обсуждение………………………………………………………………………………………………………………………….. 41

1.8. Создание пользовательских элементов посредством Preact…………………………………………… 41

ЗАДАЧА……………………………………………………………………………………………………………………………….. 41

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 41

Обсуждение………………………………………………………………………………………………………………………….. 44

1.9. Разработка компонентов посредством Storybook……………………………………………………………. 45

ЗАДАЧА……………………………………………………………………………………………………………………………….. 45

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 45

Обсуждение………………………………………………………………………………………………………………………….. 48

1.10. Тестирование кода в браузере посредством Cypress…………………………………………………….. 48

ЗАДАЧА……………………………………………………………………………………………………………………………….. 48

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 48

Обсуждение………………………………………………………………………………………………………………………….. 49

Глава 2. Маршрутизация……………………………………………………………………….. 51

2.1. Создание интерфейсов, используя реагирующую маршрутизацию………………………………. 51

ЗАДАЧА……………………………………………………………………………………………………………………………….. 51

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 52

Обсуждение………………………………………………………………………………………………………………………….. 58

2.2. Размещение состояния в маршрутах…………………………………………………………………………………. 59

ЗАДАЧА……………………………………………………………………………………………………………………………….. 59

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 60

Обсуждение………………………………………………………………………………………………………………………….. 64

2.3. Модульное тестирование посредством MemoryRouter…………………………………………………… 65

ЗАДАЧА……………………………………………………………………………………………………………………………….. 65

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 66

Обсуждение………………………………………………………………………………………………………………………….. 67

2.4. Подтверждение ухода со страницы посредством компонента Prompt………………………….. 68

ЗАДАЧА……………………………………………………………………………………………………………………………….. 68

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 69

Обсуждение………………………………………………………………………………………………………………………….. 75

2.5. Создание переходов посредством библиотеки React Transition Group………………………….. 75

ЗАДАЧА……………………………………………………………………………………………………………………………….. 75

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 76

Обсуждение………………………………………………………………………………………………………………………….. 81

2.6. Создание защищенных маршрутов…………………………………………………………………………………… 81

ЗАДАЧА……………………………………………………………………………………………………………………………….. 81

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 82

Обсуждение………………………………………………………………………………………………………………………….. 86

Глава 3. Управление состоянием……………………………………………………………. 87

3.1. Управление сложным состоянием посредством преобразователей………………………………. 87

ЗАДАЧА……………………………………………………………………………………………………………………………….. 87

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 88

Обсуждение………………………………………………………………………………………………………………………….. 94

3.2. Создание возможности “Отмена”………………………………………………………………………………………. 95

ЗАДАЧА……………………………………………………………………………………………………………………………….. 95

РЕШЕНИЕ……………………………………………………………………………………………………………………………. 95

Обсуждение……………………………………………………………………………………………………………………….. 101

3.3. Создание форм и проверка действительности их данных…………………………………………….. 102

ЗАДАЧА……………………………………………………………………………………………………………………………… 102

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 102

Обсуждение……………………………………………………………………………………………………………………….. 110

3.4. Часы для измерения времени……………………………………………………………………………………………. 110

ЗАДАЧА……………………………………………………………………………………………………………………………… 110

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 110

Обсуждение……………………………………………………………………………………………………………………….. 113

3.5. Мониторинг состояния сетевого подключения……………………………………………………………… 114

ЗАДАЧА……………………………………………………………………………………………………………………………… 114

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 114

Обсуждение……………………………………………………………………………………………………………………….. 116

3.6. Управление глобальным состоянием посредством библиотеки Redux……………………….. 116

ЗАДАЧА……………………………………………………………………………………………………………………………… 116

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 116

Обсуждение……………………………………………………………………………………………………………………….. 122

3.7. Сохранение состояния при обновлении страниц посредством Redux Persist……………… 123

ЗАДАЧА……………………………………………………………………………………………………………………………… 123

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 124

Обсуждение……………………………………………………………………………………………………………………….. 127

3.8. Вычисление производного состояния посредством Reselect………………………………………… 127

ЗАДАЧА……………………………………………………………………………………………………………………………… 127

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 128

Обсуждение……………………………………………………………………………………………………………………….. 131

Глава 4. Проектирование для обеспечения интерактивности……………….. 133

4.1. Создание центрального обработчика ошибок………………………………………………………………. 133

ЗАДАЧА……………………………………………………………………………………………………………………………… 133

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 134

Обсуждение……………………………………………………………………………………………………………………….. 138

4.2. Создаем интерактивное справочное руководство…………………………………………………………. 139

ЗАДАЧА……………………………………………………………………………………………………………………………… 139

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 139

Обсуждение……………………………………………………………………………………………………………………….. 146

4.3. Сложные взаимодействия посредством преобразователей………………………………………….. 146

ЗАДАЧА……………………………………………………………………………………………………………………………… 146

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 147

Обсуждение……………………………………………………………………………………………………………………….. 153

4.4. Взаимодействие с клавиатурой……………………………………………………………………………………….. 153

ЗАДАЧА……………………………………………………………………………………………………………………………… 153

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 153

Обсуждение……………………………………………………………………………………………………………………….. 156

4.5. Создание насыщенного содержимого посредством редактора Markdown…………………. 156

ЗАДАЧА……………………………………………………………………………………………………………………………… 156

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 156

Обсуждение……………………………………………………………………………………………………………………….. 161

4.6. Анимация посредством классов CSS………………………………………………………………………………. 161

ЗАДАЧА……………………………………………………………………………………………………………………………… 161

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 161

Обсуждение……………………………………………………………………………………………………………………….. 163

4.7. Анимация средствами React…………………………………………………………………………………………….. 163

ЗАДАЧА……………………………………………………………………………………………………………………………… 163

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 164

Обсуждение……………………………………………………………………………………………………………………….. 168

4.8. Анимация информационной графики посредством библиотеки TweenOne………………… 168

ЗАДАЧА……………………………………………………………………………………………………………………………… 168

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 169

Обсуждение……………………………………………………………………………………………………………………….. 175

Глава 5. Подключение к службам………………………………………………………… 176

5.1. Преобразование сетевых вызовов в хуки……………………………………………………………………….. 176

ЗАДАЧА……………………………………………………………………………………………………………………………… 176

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 177

Обсуждение……………………………………………………………………………………………………………………….. 182

5.2. Автоматическое обновление посредством счетчиков состояния…………………………………. 183

ЗАДАЧА……………………………………………………………………………………………………………………………… 183

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 184

Обсуждение……………………………………………………………………………………………………………………….. 191

5.3. Отмена сетевых запросов посредством маркеров…………………………………………………………. 192

ЗАДАЧА……………………………………………………………………………………………………………………………… 192

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 192

Обсуждение……………………………………………………………………………………………………………………….. 195

5.4. Сетевые вызовы посредством Redux………………………………………………………………………………. 195

ЗАДАЧА……………………………………………………………………………………………………………………………… 195

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 196

Обсуждение……………………………………………………………………………………………………………………….. 201

5.5. Подключение к GraphQL………………………………………………………………………………………………….. 202

ЗАДАЧА……………………………………………………………………………………………………………………………… 202

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 202

Обсуждение……………………………………………………………………………………………………………………….. 209

5.6. Уменьшение сетевой нагрузки при помощи очищенных запросов………………………………. 210

ЗАДАЧА……………………………………………………………………………………………………………………………… 210

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 211

Обсуждение……………………………………………………………………………………………………………………….. 213

Глава 6. Библиотеки компонентов……………………………………………………….. 214

6.1. Использование библиотеки Material Design совместно с библиотекой Material-UI……. 215

ЗАДАЧА……………………………………………………………………………………………………………………………… 215

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 215

Обсуждение……………………………………………………………………………………………………………………….. 222

6.2. Простой пользовательский интерфейс посредством React Bootstrap………………………….. 223

ЗАДАЧА……………………………………………………………………………………………………………………………… 223

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 223

Обсуждение……………………………………………………………………………………………………………………….. 227

6.3. Просмотр наборов данных посредством окна React Window………………………………………. 227

ЗАДАЧА……………………………………………………………………………………………………………………………… 227

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 227

Обсуждение……………………………………………………………………………………………………………………….. 230

6.4. Создание реагирующих диалоговых окон посредством библиотеки Material-UI………. 230

ЗАДАЧА……………………………………………………………………………………………………………………………… 230

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 230

Обсуждение……………………………………………………………………………………………………………………….. 232

6.5. Создание консоли администратора посредством React Admin…………………………………… 233

ЗАДАЧА……………………………………………………………………………………………………………………………… 233

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 233

Обсуждение……………………………………………………………………………………………………………………….. 240

6.6. Использование Semantic UI вместо дизайнера………………………………………………………………. 240

ЗАДАЧА……………………………………………………………………………………………………………………………… 240

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 241

Обсуждение……………………………………………………………………………………………………………………….. 246

Глава 7. Безопасность………………………………………………………………………….. 247

7.1. Защищаем запросы, а не маршруты……………………………………………………………………………….. 247

ЗАДАЧА……………………………………………………………………………………………………………………………… 247

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 247

Обсуждение……………………………………………………………………………………………………………………….. 255

7.2. Аутентификация посредством физических ключей……………………………………………………….. 256

ЗАДАЧА……………………………………………………………………………………………………………………………… 256

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 256

Обсуждение……………………………………………………………………………………………………………………….. 266

7.3. Работа с протоколом HTTPS……………………………………………………………………………………………. 267

ЗАДАЧА……………………………………………………………………………………………………………………………… 267

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 267

Обсуждение……………………………………………………………………………………………………………………….. 271

7.4. Аутентификация посредством отпечатка пальца………………………………………………………….. 271

ЗАДАЧА……………………………………………………………………………………………………………………………… 271

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 271

Обсуждение……………………………………………………………………………………………………………………….. 276

7.5. Подтверждение действий, предоставляя учетные данные……………………………………………. 277

ЗАДАЧА……………………………………………………………………………………………………………………………… 277

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 277

Обсуждение……………………………………………………………………………………………………………………….. 283

7.6. Однофакторная аутентификация…………………………………………………………………………………….. 284

ЗАДАЧА……………………………………………………………………………………………………………………………… 284

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 284

Обсуждение……………………………………………………………………………………………………………………….. 288

7.7. Проверка приложения на устройстве Android……………………………………………………………….. 289

ЗАДАЧА……………………………………………………………………………………………………………………………… 289

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 290

Обсуждение……………………………………………………………………………………………………………………….. 291

7.8. Проверка безопасности посредством ESlint…………………………………………………………………… 291

ЗАДАЧА……………………………………………………………………………………………………………………………… 291

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 292

Обсуждение……………………………………………………………………………………………………………………….. 295

7.9. Удобные для браузера формы входа в систему…………………………………………………………….. 296

ЗАДАЧА……………………………………………………………………………………………………………………………… 296

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 296

Обсуждение……………………………………………………………………………………………………………………….. 297

Глава 8. Тестирование………………………………………………………………………….. 299

8.1. Работа с библиотекой React Testing Library…………………………………………………………………… 300

ЗАДАЧА……………………………………………………………………………………………………………………………… 300

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 301

Обсуждение……………………………………………………………………………………………………………………….. 307

8.2. Использование Storybook для тестирования отрисовки……………………………………………….. 308

ЗАДАЧА……………………………………………………………………………………………………………………………… 308

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 308

Обсуждение……………………………………………………………………………………………………………………….. 314

8.3. Тестирование без сервера посредством Cypress……………………………………………………………. 315

ЗАДАЧА……………………………………………………………………………………………………………………………… 315

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 315

Обсуждение……………………………………………………………………………………………………………………….. 322

8.4. Использование Cypress для офлайнового тестирования……………………………………………….. 323

ЗАДАЧА……………………………………………………………………………………………………………………………… 323

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 323

Обсуждение……………………………………………………………………………………………………………………….. 326

8.5. Использование Selenium для тестирования в браузере…………………………………………………. 326

ЗАДАЧА……………………………………………………………………………………………………………………………… 326

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 327

Обсуждение……………………………………………………………………………………………………………………….. 333

8.6. Тестирование внешнего вида на разных браузерах посредством ImageMagick………… 334

ЗАДАЧА……………………………………………………………………………………………………………………………… 334

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 334

Обсуждение……………………………………………………………………………………………………………………….. 341

8.7. Добавление консоли в браузер мобильного устройства………………………………………………. 342

ЗАДАЧА……………………………………………………………………………………………………………………………… 342

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 342

Обсуждение……………………………………………………………………………………………………………………….. 345

8.8. Удаление произвольности из тестов……………………………………………………………………………….. 346

ЗАДАЧА……………………………………………………………………………………………………………………………… 346

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 347

Обсуждение……………………………………………………………………………………………………………………….. 349

8.9. Путешествие во времени…………………………………………………………………………………………………… 350

ЗАДАЧА……………………………………………………………………………………………………………………………… 350

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 350

Обсуждение……………………………………………………………………………………………………………………….. 355

Глава 9. Доступность специальных возможностей……………………………….. 356

9.1. Использование ориентиров……………………………………………………………………………………………… 357

ЗАДАЧА……………………………………………………………………………………………………………………………… 357

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 359

Обсуждение……………………………………………………………………………………………………………………….. 362

9.2. Применение ролей…………………………………………………………………………………………………………….. 362

ЗАДАЧА……………………………………………………………………………………………………………………………… 362

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 363

Обсуждение……………………………………………………………………………………………………………………….. 371

9.3. Проверка доступности посредством ESlint…………………………………………………………………….. 372

ЗАДАЧА……………………………………………………………………………………………………………………………… 372

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 372

Обсуждение……………………………………………………………………………………………………………………….. 378

9.4. Динамический анализ посредством axe DevTools…………………………………………………………. 379

ЗАДАЧА……………………………………………………………………………………………………………………………… 379

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 379

Обсуждение……………………………………………………………………………………………………………………….. 383

9.5. Автоматизация тестирования в браузере посредством Cypress Axe……………………………. 384

ЗАДАЧА……………………………………………………………………………………………………………………………… 384

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 384

Обсуждение……………………………………………………………………………………………………………………….. 387

9.6. Добавление в страницу кнопок пропуска содержимого……………………………………………….. 388

ЗАДАЧА……………………………………………………………………………………………………………………………… 388

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 389

Обсуждение……………………………………………………………………………………………………………………….. 394

9.7. Добавление возможности пропуска областей страницы……………………………………………… 395

ЗАДАЧА……………………………………………………………………………………………………………………………… 395

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 396

Обсуждение……………………………………………………………………………………………………………………….. 404

9.8. Захват области действия в модальных окнах………………………………………………………………… 404

ЗАДАЧА……………………………………………………………………………………………………………………………… 404

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 406

Обсуждение……………………………………………………………………………………………………………………….. 407

9.9. Создание считывателя экрана посредством Speech API………………………………………………. 407

ЗАДАЧА……………………………………………………………………………………………………………………………… 407

РЕШЕНИЕ………………………………………………………………………………………………………………………….. 408

Обсуждение……………………………………………………………………………………………………………………….. 412

Глава 10. Производительность……………………………………………………………… 413

10.1. Браузерные средства настройки производительности……………………………………………….. 414

ЗАДАЧА……………………………………………………………………………………………………………………………. 414

РЕШЕНИЕ………………………………………………………………………………………………………………………… 414

Обсуждение……………………………………………………………………………………………………………………… 421

10.2. Слежение за отрисовкой посредством Profiler…………………………………………………………….. 421

ЗАДАЧА……………………………………………………………………………………………………………………………. 421

РЕШЕНИЕ………………………………………………………………………………………………………………………… 422

Обсуждение……………………………………………………………………………………………………………………… 427

10.3. Создание модульных тестов с Profiler………………………………………………………………………….. 427

ЗАДАЧА……………………………………………………………………………………………………………………………. 427

РЕШЕНИЕ………………………………………………………………………………………………………………………… 427

Обсуждение……………………………………………………………………………………………………………………… 431

10.4. Точное измерение времени…………………………………………………………………………………………….. 432

ЗАДАЧА……………………………………………………………………………………………………………………………. 432

РЕШЕНИЕ………………………………………………………………………………………………………………………… 433

Обсуждение……………………………………………………………………………………………………………………… 434

10.5. Уменьшение размера приложений посредством разделения кода…………………………….. 436

ЗАДАЧА……………………………………………………………………………………………………………………………. 436

РЕШЕНИЕ………………………………………………………………………………………………………………………… 437

Обсуждение……………………………………………………………………………………………………………………… 442

10.6. Объединение сетевых обещаний…………………………………………………………………………………… 443

ЗАДАЧА……………………………………………………………………………………………………………………………. 443

РЕШЕНИЕ………………………………………………………………………………………………………………………… 444

Обсуждение……………………………………………………………………………………………………………………… 446

10.7. Отрисовка на стороне сервера………………………………………………………………………………………. 447

ЗАДАЧА……………………………………………………………………………………………………………………………. 447

РЕШЕНИЕ………………………………………………………………………………………………………………………… 447

Обсуждение……………………………………………………………………………………………………………………… 457

10.8. Использование основных показателей веб-производительности………………………………. 458

ЗАДАЧА……………………………………………………………………………………………………………………………. 458

РЕШЕНИЕ………………………………………………………………………………………………………………………… 459

Обсуждение……………………………………………………………………………………………………………………… 461

Глава 11. Прогрессивные веб-приложения…………………………………………… 462

11.1. Создаем сервис-воркеры посредством Workbox………………………………………………………….. 462

ЗАДАЧА……………………………………………………………………………………………………………………………. 462

РЕШЕНИЕ………………………………………………………………………………………………………………………… 465

Обсуждение……………………………………………………………………………………………………………………… 479

11.2. Создание прогрессивных веб-приложений посредством Create React App………………. 480

ЗАДАЧА……………………………………………………………………………………………………………………………. 480

РЕШЕНИЕ………………………………………………………………………………………………………………………… 480

Обсуждение……………………………………………………………………………………………………………………… 483

11.3. Кеширование сторонних ресурсов……………………………………………………………………………….. 483

ЗАДАЧА……………………………………………………………………………………………………………………………. 483

РЕШЕНИЕ………………………………………………………………………………………………………………………… 483

Обсуждение……………………………………………………………………………………………………………………… 487

11.4. Автоматическая перезагрузка воркеров……………………………………………………………………….. 487

ЗАДАЧА……………………………………………………………………………………………………………………………. 487

РЕШЕНИЕ………………………………………………………………………………………………………………………… 489

Обсуждение……………………………………………………………………………………………………………………… 492

11.5. Добавление извещений…………………………………………………………………………………………………… 492

ЗАДАЧА……………………………………………………………………………………………………………………………. 492

РЕШЕНИЕ………………………………………………………………………………………………………………………… 493

Обсуждение……………………………………………………………………………………………………………………… 499

11.6. Модификации в режиме офлайн посредством фоновой синхронизации…………………… 500

ЗАДАЧА……………………………………………………………………………………………………………………………. 500

РЕШЕНИЕ………………………………………………………………………………………………………………………… 500

Обсуждение……………………………………………………………………………………………………………………… 505

11.7. Добавляем специализированный установочный пользовательский интерфейс………. 506

ЗАДАЧА……………………………………………………………………………………………………………………………. 506

РЕШЕНИЕ………………………………………………………………………………………………………………………… 507

Обсуждение……………………………………………………………………………………………………………………… 510

11.8. Предоставление ответов в режиме офлайн…………………………………………………………………… 511

ЗАДАЧА……………………………………………………………………………………………………………………………. 511

РЕШЕНИЕ………………………………………………………………………………………………………………………… 512

Обсуждение……………………………………………………………………………………………………………………… 515

Предметный указатель…………………………………………………………………………. 517

Об авторах……………………………………………………………………………………………. 525

Об обложке…………………………………………………………………………………………… 526

Опубликовано

Новинка: “Самоучитель 3ds Max 2022”

Самоучитель 3ds Max 2022

Представляем книгу А. Горелик и Ю. Васильевой “Самоучитель 3ds Max 2022“.

Описание

В основу книги положена эффективная методика, основанная на многолетним опыте обучения студентов работе с программой трехмерного моделирования Autodesk 3ds Max на примерах и упражнениях. Книга рассчитана не только на новых пользователей программы, но и на тех, кто хорошо с ней знаком.  Рассматриваются методы моделирования простых и сложных объектов, создания материалов любой сложности, инструменты анимации, возможности анимации с учетом законов физики, создания естественного и искусственного освещения, методы визуализации с использованием Arnold и V-Ray. Значительное внимание уделено персонажной анимации. Электронный архив содержит наглядные видео- и дополнительные материалы и упражнения.

Для широкого круга пользователей

  • Моделирование простых и сложных объектов
  • Создание материалов любой сложности
  • Инструменты анимации
  • Новые возможности создания анимации с учетом законов физики
  • Освещение
  • Стандартные методы визуализации, mental ray, Arnold, V-Ray
  • Персонажная анимация
  • Электронный архив с дополнительными материалами
  • Наглядные видео- и дополнительные материалы в электронном архиве

ДОСТИЖЕНИЕ МАСТЕРСТВА – ЭТО УДЕЛ УПОРНЫХ И НАСТОЙЧИВЫХ

Отзывы

Не одно поколение студентов освоило программу 3ds Max по методическим материалам автора, написанным просто и доходчиво.
Л.Е. Дягилев, профессор кафедры дизайна Института современных знаний им. А.М. Широкова

Методика изложения материала в виде последовательности упражнений, используемая автором, упрощает изучение программы 3ds Max и способствует быстрому и увлекательному процессу ее усвоения. Упражнения написаны настолько просто и детально, что книга вполне может быть рекомендована для самостоятельного изучения программы всеми любителями трехмерной графики.
К.А. Стрикелева, канд. искусствоведения, проф. кафедры теории и истории дизайна Белорусской государственной академии искусств

Я являюсь новичком в 3D-моделировании. Книга потрясающая, автор все детально пошагово расписывает, затронуты все необходимые темы, к книге прилагается папка с файлами со сценами по упражнениям и практическими заданиями, где все аккуратно структурировано. Хотелось бы увидеть продолжение. Огромное спасибо автору за его труд!
Наталья, читатель

Васильева Юлия Дмитриевна

Васильева Юлия Дмитриевна – кандидат технических наук, 11 лет проработала в Институте современных знаний имени А.М. Широкова, вела курсы компьютерной графики в Белорусской государственной академии искусств, Белорусском государственном педагогическом университете, Автор 35 научных работ и учебно-методических пособий. Является одним из редакторов сайта http://3dtuts.by по трехмерному моделированию.

Горелик Александр Гиршевич

Горелик Александр Гиршевич — доктор технических наук, профессор. 36 лет работал в Институте технической кибернетики Национальной академии наук Беларуси в области автоматизации проектирования, компьютерной графики и геометрического моделирования. Работал деканом факультета информационных технологий Европейского гуманитарного университета, деканом факультета управления Института современных знаний имени А.М. Широкова, в настоящее время профессор кафедры высшей математики и информатики того же института. Автор 145 научных работ и учебно-методических пособий, в том числе 7 монографий в области автоматизации проектирования и компьютерной графики и книг «Самоучитель 3ds Max 2012/2014/2016/2018/2020», выпущенных издательством БХВ-Петербург. Ведет сайт http://3dtuts.by, посвященный трехмерному моделированию.

 

Книгу “Самоучитель 3ds Max 2022” можно купить со скидкой в интернет-магазине издательства “БХВ”.

Предисловие…………………………………………………………………………………………… 15

Электронный архив…………………………………………………………………………………………………………………… 16

Глава 1. Основные понятия…………………………………………………………………… 19

Требования к системе………………………………………………………………………………………………………………… 19

Новое в 3ds Max 2022……………………………………………………………………………………………………………….. 20

Видовые окна……………………………………………………………………………………………………………………… 20

Моделирование………………………………………………………………………………………………………………….. 20

Визуализация……………………………………………………………………………………………………………………… 21

Интерфейс программы………………………………………………………………………………………………………………. 21

Начало работы…………………………………………………………………………………………………………………… 21

Командная панель……………………………………………………………………………………………………………… 24

Конфигурация видовых окон…………………………………………………………………………………………….. 25

Панель с кнопками управления видовыми окнами…………………………………………………………. 27

Режимы отображения………………………………………………………………………………………………………… 28

Выделение объектов………………………………………………………………………………………………………….. 30

Команды Undo и Redo……………………………………………………………………………………………………….. 31

Трансформации объектов………………………………………………………………………………………………….. 32

Системы координат……………………………………………………………………………………………………………. 33

Центр преобразования………………………………………………………………………………………………………. 34

Клонирование объектов…………………………………………………………………………………………………….. 36

Зеркальное отображение объектов………………………………………………………………………………….. 37

Группы объектов………………………………………………………………………………………………………………… 38

Слои…………………………………………………………………………………………………………………………………….. 38

Единицы измерения……………………………………………………………………………………………………………. 40

Сетка координат………………………………………………………………………………………………………………… 41

Привязки……………………………………………………………………………………………………………………………… 42

Выравнивание объектов……………………………………………………………………………………………………. 44

Файлы………………………………………………………………………………………………………………………………….. 45

Импорт в сцену объектов из других MAX-файлов………………………………………………………….. 47

Создание и работа с проектом………………………………………………………………………………………….. 47

Визуализация и сохранение растрового изображения…………………………………………………… 48

Настройка некоторых параметров графического интерфейса……………………………………… 49

Контрольные вопросы………………………………………………………………………………………………………………. 50

Глава 2. Моделирование………………………………………………………………………… 51

Создание простых объектов……………………………………………………………………………………………………… 51

Упражнение № 2-1. Привязка к сетке, массивы……………………………………………………………………….. 54

Установка проекта…………………………………………………………………………………………………………….. 54

Настройка единиц измерения и параметров сетки…………………………………………………………. 54

Установка привязок……………………………………………………………………………………………………………. 55

Пример создания деревьев из примитивов……………………………………………………………………….. 55

Упражнение № 2-2. Основные команды. “Восстанови стену, собери спички”…………………….. 58

Первый способ, установка координат……………………………………………………………………………… 58

Второй способ……………………………………………………………………………………………………………………. 59

Собрать спички………………………………………………………………………………………………………………….. 59

Практическая работа…………………………………………………………………………………………………………. 60

Упражнение № 2-3. Создание конструкций из примитивов, рендеринг………………………………… 60

Стандартные примитивы…………………………………………………………………………………………………… 60

Создание колоннады…………………………………………………………………………………………………………. 60

Рендеринг……………………………………………………………………………………………………………………………. 62

Практическая работа…………………………………………………………………………………………………………. 63

Упражнение № 2-4. Стандартные и дополнительные примитивы………………………………………… 63

Практическая работа…………………………………………………………………………………………………………. 67

Модификаторы…………………………………………………………………………………………………………………………… 67

Упражнение № 2-5. Применение модификаторов…………………………………………………………………… 69

Построение лампы……………………………………………………………………………………………………………… 69

Моделирование кресла……………………………………………………………………………………………………… 71

Моделирование стола……………………………………………………………………………………………………….. 72

Моделирование корзины…………………………………………………………………………………………………… 73

Практическая работа…………………………………………………………………………………………………………. 75

Упражнение № 2-6. Сплайны, тела вращения…………………………………………………………………………. 75

Типы сплайнов……………………………………………………………………………………………………………………. 75

Построение сплайнов………………………………………………………………………………………………………… 75

Визуализация сплайнов…………………………………………………………………………………………………….. 76

Типы вершин сплайна Line……………………………………………………………………………………………….. 77

Задание типов вершин сплайна Line………………………………………………………………………………… 78

Преобразование сплайна в редактируемый сплайн……………………………………………………….. 78

Редактирование сплайна…………………………………………………………………………………………………… 78

Создание тела вращения…………………………………………………………………………………………………… 79

Построение модели фонтана…………………………………………………………………………………………….. 80

Модель вазы……………………………………………………………………………………………………………………….. 81

Практическая работа…………………………………………………………………………………………………………. 82

Упражнение № 2-7. Выдавливание, фаски………………………………………………………………………………. 82

Создание объемной модели с помощью модификатора Extrude…………………………………… 82

Создание объемной модели с помощью модификатора Bevel……………………………………….. 83

Упражнение № 2-8. Построение объемных моделей методом лофтинга……………………………… 84

Практическая работа…………………………………………………………………………………………………………. 87

Упражнение № 2-9. Булева операция ProBoolean………………………………………………………………….. 88

Булевы операции……………………………………………………………………………………………………………….. 88

Виды операций команды ProBoolean………………………………………………………………………………. 89

Создание модели кружки с использованием булевых операций…………………………………… 90

Упражнение № 2-10. Булева операция ProCutter…………………………………………………………………… 93

Практическая работа…………………………………………………………………………………………………………. 95

Упражнение № 2-11. Простой домик……………………………………………………………………………………….. 95

Построение стен…………………………………………………………………………………………………………………. 95

Построение крыши…………………………………………………………………………………………………………….. 98

Практическая работа…………………………………………………………………………………………………………. 99

Упражнение № 2-12. Составные объекты. Команда Scatter………………………………………………….. 99

Деревья………………………………………………………………………………………………………………………………… 99

Камни………………………………………………………………………………………………………………………………… 102

Распределение объектов с помощью инструмента Scatter…………………………………………… 103

Модификаторы Edit Poly и Edit Mesh…………………………………………………………………………………….. 105

Сеточные модели……………………………………………………………………………………………………………… 105

Свитки Selection и Soft Selection…………………………………………………………………………………….. 106

Выделение подобъектов………………………………………………………………………………………………….. 106

Плавное выделение подобъектов……………………………………………………………………………………. 108

Упражнение № 2-13. Моделирование флакона…………………………………………………………………….. 108

Создание базовой формы………………………………………………………………………………………………… 109

Создание новых ребер…………………………………………………………………………………………………….. 110

Выдавливание кольцевых выступов на боковых гранях……………………………………………… 110

Создание впадин на боковых гранях……………………………………………………………………………… 111

Закрытие дна и скругление ребер…………………………………………………………………………………… 113

Создание надписей………………………………………………………………………………………………………….. 113

Создание крышки…………………………………………………………………………………………………………….. 114

Практическая работа………………………………………………………………………………………………………. 115

Упражнение № 2-14. Editable Poly. Деформация кистью…………………………………………………….. 116

Деформация кистью инструментами панели Ribbon……………………………………………………. 116

Упражнение № 2-15. Модель лодки. Использование модификатора Displace…………………… 118

Создание эскизов……………………………………………………………………………………………………………… 118

Моделирование лодки…………………………………………………………………………………………………….. 120

Моделирование океана…………………………………………………………………………………………………… 126

Практическая работа………………………………………………………………………………………………………. 128

Упражнение № 2-16. Моделирование скатерти и шторы.
Модификаторы Cloth, Garment Maker и HSDS………………………………………………………………………. 128

Моделирование скатерти………………………………………………………………………………………………… 128

Моделирование шторы……………………………………………………………………………………………………. 132

Практическая работа………………………………………………………………………………………………………. 133

Архитектурные объекты…………………………………………………………………………………………………………. 133

Стены………………………………………………………………………………………………………………………………… 133

Окна…………………………………………………………………………………………………………………………………… 135

Двери…………………………………………………………………………………………………………………………………. 136

Упражнение № 2-17. Строим дачный дом…………………………………………………………………………….. 136

Построение системы стен………………………………………………………………………………………………… 136

Построение окон………………………………………………………………………………………………………………. 137

Построение дверей…………………………………………………………………………………………………………… 139

Построение фронтонов……………………………………………………………………………………………………. 139

Второй этаж……………………………………………………………………………………………………………………… 140

Построение лестницы………………………………………………………………………………………………………. 140

Сделай сам……………………………………………………………………………………………………………………….. 142

Построение ломаной крыши…………………………………………………………………………………………… 142

Металлочерепица……………………………………………………………………………………………………………. 143

Печные трубы…………………………………………………………………………………………………………………… 145

Построение водостоков…………………………………………………………………………………………………… 147

Практическая работа………………………………………………………………………………………………………. 148

Контрольные вопросы…………………………………………………………………………………………………………….. 149

Глава 3. Освещение и материалы…………………………………………………………. 150

Установка проекта…………………………………………………………………………………………………………………… 150

Источники освещения……………………………………………………………………………………………………………… 150

Освещение по умолчанию………………………………………………………………………………………………………. 151

Упражнение № 3-1. Стандартные источники света……………………………………………………………… 153

Параметры источника света Omni………………………………………………………………………………….. 154

Настройка теней………………………………………………………………………………………………………………. 157

Источники света Target Spot и Free Spot……………………………………………………………………….. 158

Источники света Free Direct и Target Direct………………………………………………………………….. 162

Источник света Skylight…………………………………………………………………………………………………… 164

Практическая работа………………………………………………………………………………………………………. 165

Упражнение № 3-2. Фотометрические источники света.
Освещение тремя источниками света…………………………………………………………………………………….. 165

Создание трехточечной системы света…………………………………………………………………………. 166

Настройка источников света………………………………………………………………………………………….. 168

Практическая работа………………………………………………………………………………………………………. 169

Упражнение № 3-3. Объемное освещение……………………………………………………………………………… 170

Создание подводной сцены…………………………………………………………………………………………….. 170

Создание источников света…………………………………………………………………………………………….. 172

Создание эффекта объемного освещения………………………………………………………………………. 174

Практическая работа………………………………………………………………………………………………………. 176

Редактор материалов………………………………………………………………………………………………………………. 176

Редактор материалов Compact Material Editor…………………………………………………………………….. 178

Редактор материалов Slate Material Editor…………………………………………………………………………… 180

Упражнение № 3-4. Mатериал Physical Material………………………………………………………………….. 182

Шаблоны материала Physical Material…………………………………………………………………………… 183

Создание стекла……………………………………………………………………………………………………………….. 184

Создание металлической поверхности………………………………………………………………………….. 185

Неоновое освещение………………………………………………………………………………………………………… 186

Сохранение созданных материалов в текущей библиотеке………………………………………… 187

Практическая работа………………………………………………………………………………………………………. 187

Упражнение № 3-5. Составные материалы…………………………………………………………………………… 188

Материал Top/Bottom………………………………………………………………………………………………………. 188

Материал Double Sided…………………………………………………………………………………………………… 189

Упражнение № 3-6. Многокомпонентный материал Multi/Sub-Object……………………………….. 190

Подготовка материала…………………………………………………………………………………………………….. 190

Распределение материалов по полигонам…………………………………………………………………….. 192

Практическая работа………………………………………………………………………………………………………. 193

Текстурные карты и каналы…………………………………………………………………………………………………… 193

Типы текстурных карт…………………………………………………………………………………………………………….. 194

Упражнение № 3-7. Работа с текстурными картами…………………………………………………………….. 196

Применение текстурной карты……………………………………………………………………………………….. 196

Применение произвольных графических файлов в качестве текстурных карт………….. 197

Настройка параметров текстурной карты…………………………………………………………………….. 197

Практическая работа………………………………………………………………………………………………………. 199

Упражнение № 3-8. Создание рельефа с помощью канала Bump
и эффекта Displacement……………………………………………………………………………………………………………. 199

Применение инструмента Displacement…………………………………………………………………………. 199

Применение текстурной карты Bump……………………………………………………………………………… 201

Практическая работа………………………………………………………………………………………………………. 202

Упражнение № 3-9. Подробнее о каналах…………………………………………………………………………….. 202

Настройка прозрачности по текстурной карте…………………………………………………………….. 203

Настройка отражения по текстурной карте………………………………………………………………….. 204

Градиентное отражение………………………………………………………………………………………………….. 206

Практическая работа………………………………………………………………………………………………………. 207

Упражнение № 3-10. Текстурные карты. Моделирование груши……………………………………….. 208

Создание базовой формы………………………………………………………………………………………………… 208

Создание неровностей, вмятин и асимметрии……………………………………………………………….. 208

Создание материала груши…………………………………………………………………………………………….. 209

Практическая работа………………………………………………………………………………………………………. 212

Проецирование текстурных карт…………………………………………………………………………………………… 212

Упражнение № 3-11. Параметрическое проецирование текстурных карт…………………………. 213

Проецирование текстурных карт на примитивы…………………………………………………………… 213

Корректировка положения текстурной карты………………………………………………………………. 214

Использование фактического размера текстурной карты……………………………………………. 216

Упражнение № 3-12. Применение модификатора UVW Map……………………………………………….. 218

Типы проецирования текстурных карт………………………………………………………………………….. 218

Настройка параметров модификатора UVW Map………………………………………………………… 219

Подобъект Gizmo………………………………………………………………………………………………………………. 220

Размещение текстуры внутри боковых поверхностей………………………………………………….. 222

Практическая работа………………………………………………………………………………………………………. 223

Упражнение № 3-13. Материал Multi/Sub-Object и модификатор UVW Map…………………….. 223

Назначение объекту нескольких материалов……………………………………………………………….. 223

Настройка параметров модификатора UVW Map………………………………………………………… 226

Упражнение № 3-14. Видеоролик на экране телевизора……………………………………………………… 227

Практическая работа………………………………………………………………………………………………………. 228

Упражнение № 3-15. Модификатор Unwrap UVW………………………………………………………………… 228

Возможности модификатора Unwrap UVW……………………………………………………………………. 228

Плоскостное проецирование Flatten Mapping………………………………………………………………. 228

Криволинейный объект……………………………………………………………………………………………………. 232

Создание текстуры…………………………………………………………………………………………………………… 242

Практическая работа………………………………………………………………………………………………………. 243

Контрольные вопросы…………………………………………………………………………………………………………….. 244

Глава 4. Визуализация сцены и камеры……………………………………………….. 245

Установка проекта…………………………………………………………………………………………………………………… 245

Глобальное освещение……………………………………………………………………………………………………………. 245

Упражнение № 4-1. Настройка параметров глобального освещения………………………………… 246

Имитация глобального освещения…………………………………………………………………………………. 248

Общие параметры визуализации……………………………………………………………………………………………. 249

Упражнение № 4-2. Визуализатор Arnold. Начнем с простого…………………………………………… 251

Установка материалов…………………………………………………………………………………………………….. 251

Установка источников света…………………………………………………………………………………………… 253

Упражнение № 4-3. Настройки визуализатора Arnold и его компоненты………………………….. 254

Источники света и камеры визуализатора Arnold………………………………………………………… 257

Материалы визуализатора Arnold…………………………………………………………………………………. 260

Упражнение № 4-4. Текстурные карты визуализатора Arnold……………………………………………. 265

Упражнение № 4-5. Создание преломлений………………………………………………………………………….. 267

Упражнение № 4-6. Конвертация из mental ray в Arnold……………………………………………………… 268

Настройка физических материалов……………………………………………………………………………….. 271

Упражнение № 4-7. Камеры……………………………………………………………………………………………………. 273

Типы камер……………………………………………………………………………………………………………………….. 273

Настройка камер……………………………………………………………………………………………………………… 275

Упражнение № 4-8. Настройка физической камеры…………………………………………………………….. 277

Упражнение № 4-9. Размытие сцены……………………………………………………………………………………… 280

Глубина резкости…………………………………………………………………………………………………………….. 280

Глубина резкости для камеры Target…………………………………………………………………………….. 281

Глубина резкости для камеры Physical………………………………………………………………………….. 282

Контрольные вопросы…………………………………………………………………………………………………………….. 283

Глава 5. Визуализатор V-Ray………………………………………………………………… 284

Обзор V-Ray………………………………………………………………………………………………………………………………. 284

Установка проекта…………………………………………………………………………………………………………………… 284

Упражнение № 5-1. Установка визуализатора V-Ray…………………………………………………………… 285

Вкладка V-Ray………………………………………………………………………………………………………………….. 286

Свиток Global switches……………………………………………………………………………………………. 286

Свиток IPR Options………………………………………………………………………………………………….. 287

Свиток Image sampler (Antialiasing)………………………………………………………………………. 287

Свиток Image filter…………………………………………………………………………………………………… 289

Свиток Environment………………………………………………………………………………………………… 289

Свиток Color mapping…………………………………………………………………………………………….. 290

Вкладка GI………………………………………………………………………………………………………………………… 290

Свиток Global illumination…………………………………………………………………………………….. 290

Свиток Irradiance map…………………………………………………………………………………………….. 291

Первичные настройки визуализатора V-Ray…………………………………………………………………. 292

Упражнение № 5-2. Работа с окном визуализации V-Ray Frame Buffer………………………………. 293

Упражнение № 5-3. Интерактивная визуализация в V-Ray………………………………………………….. 297

Упражнение № 5-4. Настройки источников света V-Ray……………………………………………………… 298

Настройка параметров источника света VRayLight…………………………………………………….. 299

Применение стандартных источников света…………………………………………………………………. 303

Источник солнечного света VRaySun…………………………………………………………………………….. 304

Практическая работа………………………………………………………………………………………………………. 308

Упражнение № 5-5. Освещение и установка камер в интерьере………………………………………….. 309

Установка камер………………………………………………………………………………………………………………. 310

Установка дневного освещения………………………………………………………………………………………. 312

Искусственное освещение……………………………………………………………………………………………….. 313

Настройка ограничивающих плоскостей у камеры……………………………………………………… 317

Практическая работа………………………………………………………………………………………………………. 318

Упражнение № 5-6. Материалы V-Ray…………………………………………………………………………………… 319

Материал VRayMtl…………………………………………………………………………………………………………… 319

Создание материалов………………………………………………………………………………………………………. 320

Простое стекло………………………………………………………………………………………………………… 320

Зеркальная поверхность………………………………………………………………………………………… 321

Библиотека материалов…………………………………………………………………………………………. 322

Упражнение № 5-7. V-Ray. Настройки цвета и отражений………………………………………………….. 323

Создание материалов и освещения………………………………………………………………………………… 323

Создание отражений……………………………………………………………………………………………………….. 324

Влияние параметра Fresnel reflections (Отражения по Френелю)………………………………. 324

Создание размытых отражений: параметр Reflection glossiness………………………………… 325

Hilight glossiness (Размытость блика)…………………………………………………………………………….. 325

Применение текстурных карт…………………………………………………………………………………………. 326

Практическая работа………………………………………………………………………………………………………. 327

Упражнение № 5-8. V-Ray. Настройки прозрачности и свойств преломления…………………… 327

Создание тестовой сцены………………………………………………………………………………………………… 327

Создание преломлений……………………………………………………………………………………………………. 328

Настройка отражений……………………………………………………………………………………………………… 330

Размытие прозрачности…………………………………………………………………………………………………… 330

Преломление света…………………………………………………………………………………………………………… 330

Подведем итог…………………………………………………………………………………………………………………… 331

Практическая работа………………………………………………………………………………………………………. 331

Контрольные вопросы…………………………………………………………………………………………………………….. 331

Глава 6. Анимация……………………………………………………………………………….. 332

Трехмерная анимация……………………………………………………………………………………………………………… 332

Упражнение № 6-1. Простейшая анимация в автоматическом режиме……………………………… 334

Анимация падения сферы………………………………………………………………………………………………… 334

Ускорение падения сферы……………………………………………………………………………………………….. 336

Деформация сферы от столкновения с полом……………………………………………………………….. 337

Растяжение сферы……………………………………………………………………………………………………………. 338

Анимация отскока……………………………………………………………………………………………………………. 338

Визуализация анимации………………………………………………………………………………………………….. 339

Визуализация траектории……………………………………………………………………………………………….. 340

Удаление анимации…………………………………………………………………………………………………………. 341

Практическая работа………………………………………………………………………………………………………. 341

Упражнение № 6-2. Покадровая визуализация анимации. Размытие анимации……………….. 341

Размытие анимации Scanline Renderer…………………………………………………………………………… 342

Размытие анимации Arnold……………………………………………………………………………………………… 343

Размытие анимации V-Ray………………………………………………………………………………………………. 344

Упражнение № 6-3. Редактирование анимации на панелях Track View……………………………… 344

Инструменты редактора анимации Graph Editors………………………………………………………… 344

Окно ключей анимации на панели Curve Editor……………………………………………………………. 347

Упражнение № 6-4. Контроллеры анимации………………………………………………………………………… 350

Две категории контроллеров анимации…………………………………………………………………………. 350

Контроллер Bezier Float………………………………………………………………………………………………….. 351

Контроллер Noise…………………………………………………………………………………………………………….. 354

Контроллер Audio……………………………………………………………………………………………………………. 355

Контроллер Block…………………………………………………………………………………………………………….. 356

Практическая работа………………………………………………………………………………………………………. 359

Упражнение № 6-5. Продолжение анимации мяча……………………………………………………………….. 359

Графики анимированных параметров сферы……………………………………………………………….. 359

Продолжение отскоков……………………………………………………………………………………………………. 361

Упражнение № 6-6. Вращение юлы……………………………………………………………………………………….. 362

Анимация юлы………………………………………………………………………………………………………………….. 362

Масштабирование скорости воспроизведения анимации……………………………………………. 365

Практическая работа………………………………………………………………………………………………………. 365

Упражнение № 6-7. Контроллер Path Constraint………………………………………………………………….. 366

Практическая работа………………………………………………………………………………………………………. 367

Упражнение № 6-8. Анимация в ручном режиме………………………………………………………………….. 367

Последовательность создания анимации………………………………………………………………………. 367

Анимация сцены……………………………………………………………………………………………………………….. 368

Практическая работа………………………………………………………………………………………………………. 370

Упражнение № 6-9. Редактор кривых. Звуковое сопровождение………………………………………… 370

Анимация баскетбольного мяча……………………………………………………………………………………… 370

Создание эффекта отскакивания мяча…………………………………………………………………………… 371

Корректировка полета мяча……………………………………………………………………………………………. 372

Корректировка отскоков мяча от пола………………………………………………………………………….. 373

Корректировка анимации в видовом окне……………………………………………………………………… 374

Создание звукового сопровождения………………………………………………………………………………. 376

Анимация сетки………………………………………………………………………………………………………………… 377

Вращение мяча…………………………………………………………………………………………………………………. 378

Практическая работа………………………………………………………………………………………………………. 379

Упражнение № 6-10. Прямая кинематика……………………………………………………………………………… 379

Иерархические связи……………………………………………………………………………………………………….. 379

Правила прямой кинематики…………………………………………………………………………………………… 381

Возможные проблемы при масштабировании………………………………………………………………. 382

Обеспечение целостности конструкции…………………………………………………………………………. 382

Ограничение перемещения объектов в иерархической цепочке………………………………….. 383

Наследование преобразований………………………………………………………………………………………. 384

Пример с настройками блокировок и наследований……………………………………………………. 384

Анимация манипулятора…………………………………………………………………………………………………. 386

Перенос объекта………………………………………………………………………………………………………………. 387

Практическая работа………………………………………………………………………………………………………. 388

Упражнение № 6-11. Инверсная кинематика………………………………………………………………………… 388

Режим инверсной кинематики…………………………………………………………………………………………. 388

Решатели инверсной кинематики……………………………………………………………………………………. 389

Анимация с использованием решателя HI Solver………………………………………………………….. 390

Анимация с использованием решателя HD Solver………………………………………………………… 391

Практическая работа………………………………………………………………………………………………………. 393

Контрольные вопросы…………………………………………………………………………………………………………….. 394

Глава 7. Эффекты анимации. Анимация с учетом законов физики………. 395

Установка проекта…………………………………………………………………………………………………………………… 395

Системы частиц……………………………………………………………………………………………………………………….. 395

Частицы типа Spray…………………………………………………………………………………………………………………. 396

Упражнение № 7-1. Примеры использования систем частиц………………………………………………. 397

Пример с частицами типа Tetrahedron…………………………………………………………………………… 397

Пример с частицами типа Facing…………………………………………………………………………………… 399

Частицы типа Snow………………………………………………………………………………………………………….. 399

Частицы типа Blizzard……………………………………………………………………………………………………… 400

Упражнение № 7-2. Деформации Forces в системах частиц………………………………………………… 402

Деформация типа Gravity………………………………………………………………………………………………… 402

Деформация типа Wind……………………………………………………………………………………………………. 405

Деформация типа PBomb…………………………………………………………………………………………………. 406

Деформация типа Path Follow………………………………………………………………………………………… 407

Частицы внутри сферы…………………………………………………………………………………………………….. 409

Упражнение № 7-3. Анимация взрыва……………………………………………………………………………………. 410

Анимация сгорающего бикфордова шнура…………………………………………………………………… 410

Анимация горения бикфордова шнура…………………………………………………………………………… 410

Анимация видимости вспомогательной сферы……………………………………………………………… 411

Создание искр…………………………………………………………………………………………………………………… 411

Создание анимации взрыва…………………………………………………………………………………………….. 412

Взрыв автомобиля……………………………………………………………………………………………………………. 413

Добавление эффекта горения………………………………………………………………………………………….. 415

Создание звукового сопровождения………………………………………………………………………………. 416

Практическая работа………………………………………………………………………………………………………. 417

Модуль MassFX……………………………………………………………………………………………………………………….. 417

Панель инструментов MassFX Toolbar………………………………………………………………………………….. 418

Инструменты панели MassFX Tools……………………………………………………………………………………….. 419

Вкладка World Parameters………………………………………………………………………………………………. 419

Свиток Scene Settings……………………………………………………………………………………………… 420

Свиток Advanced Settings……………………………………………………………………………………….. 421

Вкладка Simulation Tools………………………………………………………………………………………………… 421

Вкладка Multi-Object Editor……………………………………………………………………………………………. 422

Вкладка Display Options………………………………………………………………………………………………….. 425

Физические сетки в модуле MassFX……………………………………………………………………………….. 425

Параметры свитка Physical Mesh Parameters………………………………………………………………… 427

Упражнение № 7-4. Скачущий шар……………………………………………………………………………………….. 428

Определение свойств объектов сцены……………………………………………………………………………. 428

Анимация сцены……………………………………………………………………………………………………………….. 432

Практическая работа………………………………………………………………………………………………………. 433

Упражнение № 7-5. Ограничения MassFX constraint……………………………………………………………. 433

Определение свойств объектов сцены……………………………………………………………………………. 433

Установка свойств……………………………………………………………………………………………………………. 434

Практическая работа………………………………………………………………………………………………………. 435

Упражнение № 7-6. Бильярдная пирамида……………………………………………………………………………. 435

Определение свойств объектов сцены……………………………………………………………………………. 435

Настройка параметров анимации………………………………………………………………………………….. 436

Практическая работа………………………………………………………………………………………………………. 437

Упражнение № 7-7. Разбиение объекта на части………………………………………………………………….. 437

Создание тонкостенного объекта…………………………………………………………………………………… 437

Разбиение объекта: скрипт FractureVoronoi…………………………………………………………………. 437

Разбиение объектов: модуль MassFX……………………………………………………………………………… 438

Практическая работа………………………………………………………………………………………………………. 439

Упражнение 7-8. Модификатор MassFX Cloth……………………………………………………………………… 439

Параметры на уровне модификатора mCloth……………………………………………………………….. 439

Параметры на уровне вершин………………………………………………………………………………………… 441

Практическая работа………………………………………………………………………………………………………. 441

Контрольные вопросы…………………………………………………………………………………………………………….. 442

Глава 8. Персонажная анимация………………………………………………………….. 443

Установка проекта…………………………………………………………………………………………………………………… 443

Набор инструментов Character studio…………………………………………………………………………………… 443

Упражнение № 8-1. Двуногие объекты biped………………………………………………………………………… 444

Создание biped…………………………………………………………………………………………………………………. 444

Свиток Structure……………………………………………………………………………………………………………….. 446

Свиток Biped…………………………………………………………………………………………………………………….. 448

Форматы файлов………………………………………………………………………………………………………………. 449

Свиток Track Selection……………………………………………………………………………………………………… 450

Свиток Bend Links: вращение нескольких связей………………………………………………………….. 451

Связывание других объектов с biped……………………………………………………………………………… 452

Свиток Copy/Paste……………………………………………………………………………………………………………. 452

Упражнение № 8-2. Копирование анимации…………………………………………………………………………. 454

Копирование кадров анимации………………………………………………………………………………………. 454

Копирование треков анимации………………………………………………………………………………………. 456

Копирование анимации внутри сцены…………………………………………………………………………… 456

Ключи анимации……………………………………………………………………………………………………………………… 457

Цветовая палитра ключей и траекторий biped……………………………………………………………… 457

Свиток Key Info…………………………………………………………………………………………………………………. 458

Свиток Key Info, подсвиток IK: выбор опорной точки кисти и ступни………………. 459

Свиток Key Info, подсвиток Head…………………………………………………………………………… 461

Упражнение № 8-3. Баланс-фактор и гравитация………………………………………………………………… 461

Баланс-фактор………………………………………………………………………………………………………………….. 461

Практическая работа………………………………………………………………………………………………………. 462

Гравитация……………………………………………………………………………………………………………………….. 463

Упражнение № 8-4. Встраивание системы костей………………………………………………………………… 464

Создание biped…………………………………………………………………………………………………………………. 464

Размещение COM-объекта………………………………………………………………………………………………. 465

Масштабирование костей таза и ног biped относительно модели персонажа………….. 466

Расположение костей рук и позвоночника biped…………………………………………………………… 467

Размещение пальцев………………………………………………………………………………………………………… 469

Размещение головы………………………………………………………………………………………………………….. 470

Практическая работа………………………………………………………………………………………………………. 470

Упражнение № 8-5. Оснастка скелета……………………………………………………………………………………. 470

Модификатор Physique……………………………………………………………………………………………………. 470

Оснастка панды……………………………………………………………………………………………………………….. 471

Настройка параметров оболочки левой руки……………………………………………………………….. 472

Применение настроек к правой руке………………………………………………………………………………. 475

Оболочки ног. Редактирование сечений оболочек……………………………………………………….. 476

Контрольные точки………………………………………………………………………………………………………….. 478

Свойства вершин. Проверка привязки вершин………………………………………………………………. 478

Удаление влияния связи на вершины……………………………………………………………………………… 479

Пример удаления влияния связей на лишние вершины………………………………………………… 479

Корректировка весовых коэффициентов вершин………………………………………………………….. 481

Настройка параметров оболочки головы……………………………………………………………………… 483

Проверка настроек с помощью BIP-файла……………………………………………………………………. 483

Практическая работа………………………………………………………………………………………………………. 484

Упражнение № 8-6. Анимация biped в свободной форме……………………………………………………… 484

Закрепление положения ног……………………………………………………………………………………………. 484

Создание одного приседания панды……………………………………………………………………………… 484

Копирование и вставка позы панды………………………………………………………………………………. 485

Анимация рук……………………………………………………………………………………………………………………. 485

Сохранение созданной анимации biped………………………………………………………………………… 487

Практическая работа………………………………………………………………………………………………………. 488

Упражнение № 8-7. Панда на скейтборде……………………………………………………………………………… 488

Размещение панды на скейтборде………………………………………………………………………………….. 488

Связывание панды со скейтбордом………………………………………………………………………………… 488

Закрепление ног панды на скейтборде………………………………………………………………………….. 490

Анимация тела панды……………………………………………………………………………………………………… 490

Продолжение анимации………………………………………………………………………………………………….. 490

Упражнение № 8-8. Анимация спортсмена……………………………………………………………………………. 491

Создание анимации…………………………………………………………………………………………………………. 491

Сохранение анимации…………………………………………………………………………………………………….. 496

Применение созданного BIP-файла……………………………………………………………………………….. 497

Упражнение № 8-9. Спортсмен на турнике…………………………………………………………………………… 498

Упражнение № 8-10. Пошаговая анимация biped…………………………………………………………………. 504

Создание шагов………………………………………………………………………………………………………………… 504

Настройка шагов biped……………………………………………………………………………………………………. 505

Походка шагом…………………………………………………………………………………………………………………. 508

Пример пошаговой анимации…………………………………………………………………………………………. 508

Состояния ног biped…………………………………………………………………………………………………………. 510

Следы biped в окне Track View – Dope Sheet…………………………………………………………………… 511

Пример движения biped с остановкой…………………………………………………………………………….. 512

Походка бегом и вприпрыжку…………………………………………………………………………………………. 514

Деактивация следов…………………………………………………………………………………………………………. 515

Пример использования деактивации следов…………………………………………………………………. 516

Подъем по винтовой лестнице………………………………………………………………………………………… 517

Остановка biped……………………………………………………………………………………………………………….. 519

Хлопок над головой, поворот головы…………………………………………………………………………….. 520

Сохранение анимации с MAX-объектами и загрузка анимации…………………………………. 521

Анимация лап панды……………………………………………………………………………………………………….. 522

Корректировка походки персонажа………………………………………………………………………………. 523

Визуализация анимации………………………………………………………………………………………………….. 524

Практическая работа………………………………………………………………………………………………………. 524

Упражнение № 8-11. Клип из нескольких BIP-файлов…………………………………………………………. 524

Окно Motion Mixer……………………………………………………………………………………………………………. 524

Добавление BIP-файлов в “миксер”………………………………………………………………………………… 525

Воспроизведение объединенной анимации…………………………………………………………………… 527

Сохранение и загрузка анимаций…………………………………………………………………………………… 527

Контрольные вопросы…………………………………………………………………………………………………………….. 530

Использованная литература…………………………………………………………………. 533

Приложение. Описание электронного архива………………………………………. 536

Предметный указатель…………………………………………………………………………. 537

Опубликовано

Представляем книгу “Ум программиста”

Ум программиста. Как понять и осмыслить любой код

В издательстве “БХВ” вышла книга Фелины Херманс”Ум программиста. Как понять и осмыслить любой код“.

Книга освещает практические основы когнитивистики для программистов. Основные темы: осмысление и развитие чужого и собственного кода, изучение новых языков программирования, мнемонические приемы для программистов, поддержка кода в читаемом состоянии. Объяснено, как снижать когнитивную нагрузку при работе программиста, как делать код логичным и понятным для себя и коллег. Рассмотрены приемы именования функций, классов и переменных, подходы к ведению репозиториев, совместной разработке и доработке кода.

Для программистов и других IT-специалистов

ВСЁ, ЧТО ПРОГРАММИСТ ДОЛЖЕН ЗНАТЬ О МЫШЛЕНИИ

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

Внутри книги

  • Быстрые и эффективные способы освоить новые языки программирования
  • Навыки скорочтения для быстрого понимания нового кода
  • Методы разгадки смысла сложного кода
  • Способы выучить новый синтаксис и запомнить его
  • Правила написание кода, который легко читается другими
  • Выбор правильных имен для ваших переменных
  • Написание кода более понятного для новичков
  • Адаптация новых разработчиков в вашу команду

Узнайте, как оптимизировать естественные когнитивные процессы вашего мозга, чтобы легче читать код, писать код быстрее и осваивать новые языки за гораздо меньшее время. Эта книга поможет вам справиться с замешательством, которое вы испытываете, столкнувшись со странным и сложным кодом, и объяснит кодовую базу таким образом, чтобы новый член команды мог продуктивно работать в считанные дни!

О технологии

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

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

Отзывы профессионалов

Великолепная и глубоко информативная книга, помогает перекинуть мостик между программированием и мышлением.
 Майк Тейлор, компания CGI Inc.

Книга о том, как именно работает мозг, как эффективнее читать, писать и совместно разрабатывать код .
 Бен Мак-Намара, консалтинговое агентство DataGeek

В книге изложен научный подход, помогающий программисту разгрузить голову при работе и самому себе проторить путь к вершинам мастерства!
 Даниэла Запата Риеско, стартап M1 Finance

Если вы когда-нибудь задумывались, как брать умом, а не только усердием – прочтите эту книгу. Я каждый день убеждаюсь, насколько она помогла мне в работе.
 Чжицзюнь Лю, рекламный холдинг Mediaocean

Рисунок на обложке данной книги называется «Femme Sauvage du Canada», или «Коренная жительница Канады». Изображение взято из коллекции костюмов разных стран Жака Грассе де Сен-Совера (1757–1810) под названием «Costumes civils actuels de tous les peuples connus», изданной во Франции в 1788 году.

Издательство Manning демонстрирует изобретательность компьютерного производства с помощью обложек книг, которые основаны на богатом разнообразии региональной жизни 200 лет назад, описанном в книге Грассе де Сен-Совера.

Femme Sauvage du Canada
Фелина Херманс

Доктор Фелина Херманс — доцент Лейденского университета в Нидерландах, где она проводит научные исследования языков программирования и методов обучения программированию. Она читает лекции в академии учителей Амстердамского свободного университета, специализируясь на дидактике компьютерных наук, а также преподает в средней школе Кралингена в Роттердаме.

Фелина является создателем языка программирования Hedy, предназначенного для начинающих программистов, а также ведет подкаст Software Engineering Radio, один из крупнейших интернет-подкастов о программном обеспечении.

Книгу “Ум программиста. Как понять и осмыслить любой код” можно купить со скидкой в интернет-магазине издательства “БХВ”.

Предисловие…………………………………………………………………………………………… 13

От автора……………………………………………………………………………………………….. 15

Благодарности……………………………………………………………………………………….. 17

О книге………………………………………………………………………………………………….. 19

Структура книги………………………………………………………………………………………………………………………… 19

Дискуссионный форум liveBook……………………………………………………………………………………………….. 20

Об авторе……………………………………………………………………………………………….. 21

Об обложке…………………………………………………………………………………………….. 23

Часть I. Об улучшении навыков чтения кода…………………….. 25

Глава 1. Определение вашего типа замешательства при кодировании….. 27

1.1. Разные типы замешательства в коде…………………………………………………………………………………. 28

1.1.1. Первый тип замешательства — недостаток знаний……………………………………………… 29

1.1.2. Второй тип замешательства — недостаток информации…………………………………….. 29

1.1.3. Третий тип замешательства — недостаток вычислительной мощности…………….. 30

1.2. Различные когнитивные процессы, влияющие на процесс кодирования………………………. 31

1.2.1. Долговременная память и программирование………………………………………………………. 31

Программа на APL с точки зрения долговременной памяти……………………………….. 32

1.2.2. Кратковременная память и программирование…………………………………………………….. 32

Программа на Java с точки зрения кратковременной памяти…………………………….. 32

1.2.3. Рабочая память и программирование…………………………………………………………………….. 33

Программа на BASIC с точки зрения рабочей памяти………………………………………… 33

1.3. Совместная работа когнитивных процессов……………………………………………………………………. 34

1.3.1. Краткое описание того, как когнитивные процессы взаимодействуют
друг с другом………………………………………………………………………………………………………………………. 34

1.3.2. Когнитивные процессы и программирование……………………………………………………….. 35

Выводы……………………………………………………………………………………………………………………………………….. 37

Глава 2. Скорочтение кода…………………………………………………………………….. 39

2.1. Быстрое чтение кода…………………………………………………………………………………………………………… 40

2.1.1. Что только что происходило в вашем мозге………………………………………………………….. 41

2.1.2. Перепроверка воспроизведенного кода…………………………………………………………………. 42

Вторая попытка воспроизведения кода………………………………………………………………… 43

2.1.3. Перепроверка воспроизведенного………………………………………………………………………….. 44

2.1.4. Почему читать незнакомый код так сложно………………………………………………………….. 44

2.2. Преодоление лимитов памяти……………………………………………………………………………………………. 45

2.2.1. Сила чанков………………………………………………………………………………………………………………. 45

Чанки кода……………………………………………………………………………………………………………….. 48

2.2.2. Опытные программисты запоминают код лучше начинающих программистов.. 48

2.3. Вы видите намного больше кода, чем можете прочитать……………………………………………….. 49

2.3.1. Иконическая память…………………………………………………………………………………………………. 50

Иконическая память и код………………………………………………………………………………………. 51

2.3.2. Это не то, что вы помните; это то, как вы запоминаете………………………………………… 51

Как написать код, который можно разделить на чанки………………………………………. 52

Используйте паттерны проектирования……………………………………………………………….. 53

Пишите комментарии………………………………………………………………………………………………. 54

Оставляйте «маячки»………………………………………………………………………………………………. 55

2.3.3. Применяйте чанки…………………………………………………………………………………………………….. 58

Выводы……………………………………………………………………………………………………………………………………….. 59

Глава 3. Как быстро выучить синтаксис……………………………………………….. 61

3.1. Советы по запоминанию синтаксиса………………………………………………………………………………… 62

3.1.1. Отвлечение снижает производительность……………………………………………………………… 62

3.2. Как быстро выучить синтаксис с использованием карточек………………………………………….. 63

3.2.1. Когда использовать карточки…………………………………………………………………………………. 64

3.2.2. Расширяем набор карточек……………………………………………………………………………………… 64

3.2.3. Убираем ненужные карточки………………………………………………………………………………….. 64

3.3. Как не забывать информацию……………………………………………………………………………………………. 65

3.3.1. Почему мы забываем……………………………………………………………………………………………….. 65

Иерархия и сеть……………………………………………………………………………………………………….. 66

Кривая забывания……………………………………………………………………………………………………. 66

3.3.2. Интервальное повторение……………………………………………………………………………………….. 67

3.4. Как запомнить синтаксис надолго…………………………………………………………………………………….. 69

3.4.1. Два способа запоминания информации…………………………………………………………………. 69

Уровень хранения……………………………………………………………………………………………………. 69

Уровень воспроизведения……………………………………………………………………………………….. 69

3.4.2. Просто увидеть недостаточно………………………………………………………………………………… 70

3.4.3. Воспоминания укрепляют память…………………………………………………………………………… 70

3.4.4. Укрепление памяти путем активного мышления…………………………………………………… 71

Схемы……………………………………………………………………………………………………………………….. 72

Проработка для запоминания концепций программирования……………………………. 73

Выводы……………………………………………………………………………………………………………………………………….. 74

Глава 4. Как читать сложный код………………………………………………………….. 75

4.1. Почему так тяжело понимать сложный код……………………………………………………………………… 76

4.1.1. Чем друг от друга отличаются рабочая память и кратковременная память………. 77

4.1.2. Типы когнитивной нагрузки и как они связаны с программированием………………. 78

Внутренняя когнитивная нагрузка при чтении кода……………………………………………. 78

Внешняя когнитивная нагрузка при чтении кода…………………………………………………. 79

4.2. Способы снижения когнитивной нагрузки……………………………………………………………………….. 80

4.2.1. Рефакторинг………………………………………………………………………………………………………………. 80

4.2.2. Замена незнакомых языковых конструкций………………………………………………………….. 82

Лямбда-функции………………………………………………………………………………………………………. 82

Генератор списков…………………………………………………………………………………………………… 83

Тернарные операторы…………………………………………………………………………………………….. 84

4.2.3. Синонимизация — отличное дополнение к дидактическим карточкам……………… 85

4.3. Вспомогательные средства при перегрузке рабочей памяти…………………………………………. 85

4.3.1. Создание графа зависимостей………………………………………………………………………………… 86

4.3.2. Использование таблицы состояний………………………………………………………………………… 88

4.3.3. Сочетание графов зависимостей и таблиц состояний………………………………………….. 91

Выводы……………………………………………………………………………………………………………………………………….. 93

Часть II. Продолжаем думать о коде………………………………………. 95

Глава 5. Совершенствуем навыки углубленного понимания кода…………. 97

5.1. Роли переменных………………………………………………………………………………………………………………… 98

5.1.1. Разные переменные выполняют разные действия…………………………………………………. 98

5.1.2. Одиннадцать ролей, охватывающие почти все переменные……………………………….. 99

5.2. Роли и принципы……………………………………………………………………………………………………………….. 101

5.2.1. Польза ролей…………………………………………………………………………………………………………… 102

Практические советы по работе с ролями переменных…………………………………….. 103

5.2.2. Венгерская нотация……………………………………………………………………………………………….. 104

Системная и прикладная венгерские нотации……………………………………………………. 104

5.3. Углубленное понимание программ…………………………………………………………………………………. 106

5.3.1. Понимание текста и понимание плана…………………………………………………………………. 106

5.3.2. Этапы понимания программы………………………………………………………………………………. 106

Применение этапов углубленного понимания……………………………………………………. 107

5.4. Чтение кода как обычного текста……………………………………………………………………………………. 109

5.4.1. Что происходит в мозге при чтении кода…………………………………………………………….. 110

Поля Бродмана………………………………………………………………………………………………………. 110

Показания фМРТ……………………………………………………………………………………………………. 111

5.4.2. Если вы можете выучить французский, то сможете выучить и Python……………… 111

Как люди читают код……………………………………………………………………………………………. 113

Перед тем как читать код, программисты сканируют его…………………………………. 114

Начинающие и опытные программисты читают код по-разному……………………. 114

5.5. Стратегии понимания текста, которые можно применить к коду………………………………… 115

5.5.1. Активация пассивных знаний……………………………………………………………………………….. 116

5.5.2. Наблюдение……………………………………………………………………………………………………………. 116

5.5.3. Определение важности разных строк кода………………………………………………………….. 117

5.5.4. Предположения о значении имен переменных……………………………………………………. 118

5.5.5. Визуализация………………………………………………………………………………………………………….. 119

Таблица операций…………………………………………………………………………………………………. 119

5.5.6. Постановка вопросов…………………………………………………………………………………………….. 120

5.5.7. Резюмирование кода………………………………………………………………………………………………. 121

Выводы……………………………………………………………………………………………………………………………………… 122

Глава 6. Совершенствуем навыки решения задач программирования…. 123

6.1. Использование моделей для размышлений о коде………………………………………………………… 124

6.1.1. Преимущества использования моделей……………………………………………………………….. 124

Не все модели одинаково полезны………………………………………………………………………. 125

 

6.2. Ментальные модели…………………………………………………………………………………………………………. 126

6.2.1. Подробное исследование ментальных моделей………………………………………………….. 128

6.2.2. Изучение новых ментальных моделей…………………………………………………………………. 129

6.2.3. Как эффективно использовать ментальные модели во время размышлений о коде 130

Ментальные модели в рабочей памяти……………………………………………………………….. 130

Точные модели работают лучше…………………………………………………………………………. 131

Создание ментальных моделей исходной программы в рабочей памяти……….. 131

Ментальные модели в долговременной памяти…………………………………………………. 132

Создание ментальных моделей исходной программы в долговременной памяти 133

Ментальные модели, одновременно хранящиеся в долговременной
и рабочей памяти…………………………………………………………………………………………………… 134

6.3. Условные машины…………………………………………………………………………………………………………….. 135

6.3.1. Что такое условная машина………………………………………………………………………………….. 135

6.3.2. Примеры условных машин……………………………………………………………………………………. 136

6.3.3. Разные уровни условных машин…………………………………………………………………………… 137

6.4. Условные машины и язык…………………………………………………………………………………………………. 138

6.4.1. Расширяем набор условных машин……………………………………………………………………… 139

6.4.2. Разные условные машины могут создать взаимно конфликтующие ментальные модели   140

6.5. Условные машины и схемы……………………………………………………………………………………………… 141

6.5.1. Почему схема важна………………………………………………………………………………………………. 141

6.5.2. Являются ли условные машины семантическими……………………………………………….. 142

Выводы……………………………………………………………………………………………………………………………………… 142

Глава 7. Заблуждения…………………………………………………………………………… 143

7.1. Почему второй язык программирования выучить намного проще, чем первый…………. 144

7.1.1. Как увеличить шанс воспользоваться знаниями по программированию…………. 146

7.1.2. Разные виды трансференции…………………………………………………………………………………. 147

Осознанная и неосознанная трансференция………………………………………………………. 147

Близкая и дальняя трансференция……………………………………………………………………….. 147

7.1.3. Знания: добро или зло?………………………………………………………………………………………….. 148

7.1.4. Сложности трансференции……………………………………………………………………………………. 149

7.2. Заблуждения. Ошибки в мышлении………………………………………………………………………………… 150

7.2.1. Исправление заблуждений путем концептуальных замен…………………………………. 152

7.2.2. Подавление заблуждений……………………………………………………………………………………… 152

7.2.3. Заблуждения о языках программирования………………………………………………………….. 153

7.2.4. Предотвращение заблуждений при изучении нового языка
программирования…………………………………………………………………………………………………………… 155

7.2.5. Выявление заблуждений в новой базе кода…………………………………………………………. 156

Выводы……………………………………………………………………………………………………………………………………… 157

Часть III. О хорошем коде………………………………………………………….. 159

Глава 8. Совершенствуем навыки присваивания имен………………………… 161

8.1. Почему присваивание имен так важно……………………………………………………………………………. 162

8.1.1. Почему присваивание имени так важно………………………………………………………………. 162

Имена составляют существенную часть кодовой базы…………………………………….. 163

Имена играют роль в обзорах кода……………………………………………………………………… 163

Имена — это самая удобная форма документации……………………………………………. 163

Имена могут служить маячками…………………………………………………………………………… 163

8.1.2. Разные точки зрения на присваивание имен………………………………………………………… 163

Хорошее имя можно определить синтаксически………………………………………………… 164

Имена во всей базе кода должны быть единообразны………………………………………. 165

8.1.3. Важно грамотно подбирать имена……………………………………………………………………….. 166

Заключения о практике присваивания имен……………………………………………………….. 167

8.2. Когнитивные аспекты присваивания имен……………………………………………………………………… 167

8.2.1. Форматирование имен поддерживает кратковременную память……………………… 168

8.2.2. Понятные имена лучше закрепляются в долговременной памяти…………………….. 169

8.2.3. Полезная информация в именах переменных………………………………………………………. 170

8.2.4. Когда стоит оценивать качество имен…………………………………………………………………. 171

8.3. Какие типы имен проще всего понимать………………………………………………………………………… 172

8.3.1. Использовать аббревиатуры или нет?…………………………………………………………………. 172

Однобуквенные имена переменных…………………………………………………………………….. 173

8.3.2. Змеиный или верблюжий регистры?…………………………………………………………………….. 176

8.4. Влияние имен на ошибки кода…………………………………………………………………………………………. 177

8.4.1. В коде с некачественными именами больше ошибок………………………………………….. 177

8.5. Как выбирать хорошие имена…………………………………………………………………………………………. 178

8.5.1. Шаблоны имен……………………………………………………………………………………………………….. 178

8.5.2. Трехступенчатая модель Фейтельсона для хороших имен переменных………….. 180

Трехступенчатая модель во всех деталях…………………………………………………………… 181

Успех трехступенчатой модели Фейтельсона……………………………………………………. 181

Выводы……………………………………………………………………………………………………………………………………… 182

Глава 9. Боремся с плохим кодом и когнитивной нагрузкой.
Две концепции……………………………………………………………………………………… 183

9.1. Почему код с запахами кода создает большую когнитивную нагрузку……………………… 184

9.1.1. Краткая информации о запахах кода…………………………………………………………………… 184

Запахи кода на уровне метода…………………………………………………………………………….. 186

Запахи кода на уровне класса……………………………………………………………………………… 186

Запахи кода на уровне базы кода……………………………………………………………………….. 187

Влияние запахов кода…………………………………………………………………………………………… 187

9.1.2. Как запахи кода вредят мышлению……………………………………………………………………… 188

«Длинный список параметров», сложные «Операторы переключения» — перегрузка рабочей памяти      188

«Всемогущий класс», «Длинный метод» — невозможно эффективно разбить код на чанки             189

«Клоны кода» — невозможно правильно разбить код на чанки………………………. 189

9.2. Зависимость когнитивной нагрузки от плохих имен……………………………………………………… 190

9.2.1. Лингвистические антипаттерны проектирования……………………………………………….. 190

9.2.2. Измерение когнитивной нагрузки…………………………………………………………………………. 191

Шкала Пааса для когнитивной нагрузки…………………………………………………………….. 192

Измерение нагрузки по глазам……………………………………………………………………………… 193

Измерение нагрузки по коже………………………………………………………………………………… 193

Измерение нагрузки по мозгу……………………………………………………………………………….. 194

Запись биотоков мозга………………………………………………………………………………………….. 194

Функциональная fNIRS-томография и программирование………………………………. 195

9.2.3. Лингвистические антипаттерны и когнитивная нагрузка…………………………………… 195

9.2.4. Почему лингвистические антипаттерны вызывают замешательство……………….. 196

Выводы……………………………………………………………………………………………………………………………………… 197

Глава 10. Совершенствуем навыки решения сложных задач……………….. 199

10.1. Что такое решение задач……………………………………………………………………………………………….. 200

10.1.1. Элементы решения задач…………………………………………………………………………………… 200

10.1.2. Пространство состояний……………………………………………………………………………………. 200

10.2. Какую роль при решении задач программирования играет
долговременная память………………………………………………………………………………………………….. 201

10.2.1. Решение задачи — это отдельный когнитивный процесс?……………………………… 201

При решении задач вы используете долговременную память……………………….. 202

Вашему мозгу проще решить знакомые задачи………………………………………………. 202

10.2.2. Как научить долговременную память решать задачи…………………………………….. 203

10.2.3. Два вида памяти, наиболее существенные при решении задачи…………………… 203

Какие виды памяти играют роль при решении задач…………………………………….. 204

Потеря знаний или навыков………………………………………………………………………………. 205

10.3. Автоматизация: создание имплицитной памяти………………………………………………………….. 206

10.3.1. Имплицитная память с течением времени………………………………………………………… 207

Когнитивный этап………………………………………………………………………………………………. 208

Ассоциативный этап………………………………………………………………………………………….. 208

Автономный этап……………………………………………………………………………………………….. 209

10.3.2. Почему автоматизация помогает программировать быстрее………………………… 210

10.3.3. Улучшение имплицитной памяти……………………………………………………………………… 211

10.4. Обучение на основе кода и его объяснения………………………………………………………………….. 212

10.4.1. Новый вид когнитивной нагрузки: соответствующая нагрузка……………………… 213

10.4.2. Примеры с решением на практике…………………………………………………………………….. 215

Работайте вместе с коллегой…………………………………………………………………………….. 215

Используйте GitHub…………………………………………………………………………………………… 215

Читайте книги или блоги об исходном коде…………………………………………………….. 216

Выводы……………………………………………………………………………………………………………………………………… 216

Часть IV. О совместной работе над кодом…………………………. 217

Глава 11. Процесс написания кода………………………………………………………. 219

11.1. Различные активности, выполняемые во время программирования………………………….. 220

11.1.1. Поиск……………………………………………………………………………………………………………………. 220

11.1.2. Осмысление…………………………………………………………………………………………………………. 221

11.1.3. Переписывание……………………………………………………………………………………………………. 221

11.1.4. Наращивание………………………………………………………………………………………………………. 222

11.1.5. Исследование………………………………………………………………………………………………………. 222

11.1.6. А как же отладка?……………………………………………………………………………………………….. 223

11.2. Программист отвлекся……………………………………………………………………………………………………. 223

11.2.1. Задачи программирования нуждаются в «разогреве»…………………………………….. 224

11.2.2. Что происходит после отвлечения……………………………………………………………………. 225

11.2.3. Как подготовиться к отвлечению………………………………………………………………………. 225

Сохраняйте воображаемую модель…………………………………………………………………. 225

Помогите своей проспективной памяти……………………………………………………………. 226

Определитесь с промежуточными целями……………………………………………………….. 228

11.2.4. Когда отвлекать программиста…………………………………………………………………………. 228

11.2.5. Пара слов о многозадачности…………………………………………………………………………… 230

Многозадачность и автоматизация………………………………………………………………….. 230

Исследования многозадачности……………………………………………………………………….. 231

Выводы……………………………………………………………………………………………………………………………………… 231

Глава 12. Проектирование и усовершенствование больших систем……… 233

12.1. Проверка свойств базы кода………………………………………………………………………………………….. 234

12.1.1. Когнитивные измерения……………………………………………………………………………………… 234

Подверженность ошибкам…………………………………………………………………………………. 235

Согласованность………………………………………………………………………………………………… 236

Размытость………………………………………………………………………………………………………….. 236

Скрытые зависимости………………………………………………………………………………………… 237

Преждевременная фиксация решения………………………………………………………………. 238

Вязкость………………………………………………………………………………………………………………. 238

Поэтапное оценивание………………………………………………………………………………………. 239

Выразительность ролей…………………………………………………………………………………….. 239

Близость соответствия……………………………………………………………………………………….. 240

Трудность мыслительных операций………………………………………………………………… 241

Вторичные обозначения……………………………………………………………………………………. 242

Градиент абстракции………………………………………………………………………………………… 242

Наглядность……………………………………………………………………………………………………….. 243

12.1.2. Использование когнитивных измерений базы кода
для улучшения базы кода………………………………………………………………………………………………. 243

12.1.3. Проектные маневры и их плюсы и минусы………………………………………………………. 244

Подверженность ошибкам и вязкость………………………………………………………………. 244

Преждевременная фиксация решения и поэтапное оценивание
против подверженности ошибкам…………………………………………………………………….. 245

Выразительность ролей и размытость…………………………………………………………….. 245

12.2. Измерения и активности…………………………………………………………………………………………………. 245

12.2.1. Влияние измерений на разные активности………………………………………………………. 245

Поиск…………………………………………………………………………………………………………………… 245

Осмысление………………………………………………………………………………………………………… 246

Переписывание…………………………………………………………………………………………………… 246

Наращивание……………………………………………………………………………………………………… 246

Исследование……………………………………………………………………………………………………… 247

12.2.2. Изменение базы кода под ожидаемые активности………………………………………….. 247

Выводы……………………………………………………………………………………………………………………………………… 247

Глава 13. Как ввести новых программистов в курс дела………………………. 249

13.1. Проблемы процесса адаптации…………………………………………………………………………………….. 249

13.2. Различия между профессионалами и новичками…………………………………………………………. 251

13.2.1. Поведение новичка более подробно…………………………………………………………………. 251

Оригинальная концепция Пиаже………………………………………………………………………. 251

Концепция неопиажизма для программирования…………………………………………… 252

При изучении новой информации вы можете временно забывать
некоторые вещи………………………………………………………………………………………………….. 255

13.2.2. Разница между вещественным и абстрактным видением концепций…………….. 255

13.3. Активности для улучшения процесса адаптации………………………………………………………… 258

13.3.1. Ограничение заданий до одной активности…………………………………………………….. 258

13.3.2. Поддержка памяти новичка……………………………………………………………………………….. 259

Поддержка долговременной памяти: объяснение
релевантной информации………………………………………………………………………………….. 259

Поддержка кратковременной памяти: ставьте небольшие
конкретные задачи…………………………………………………………………………………………….. 260

Поддержка рабочей памяти: используйте диаграммы…………………………………… 261

13.3.3. Совместное чтение кода…………………………………………………………………………………….. 261

Активация……………………………………………………………………………………………………………. 262

Определение важности………………………………………………………………………………………. 262

Постановка предположений……………………………………………………………………………… 262

Наблюдение……………………………………………………………………………………………………….. 262

Визуализация……………………………………………………………………………………………………… 263

Постановка вопросов…………………………………………………………………………………………. 263

Резюмирование…………………………………………………………………………………………………… 263

Выводы……………………………………………………………………………………………………………………………………… 263

Эпилог. Пара слов перед прощанием……………………………………………………. 265

Предметный указатель…………………………………………………………………………. 267

 

Опубликовано

Новая книга: “Python 3 и PyQt 6. Разработка приложений”

Python 3 и PyQt 6. Разработка приложений

Представляем новинку: книгу Владимира Дронова и Николая Прохоренка “Python 3 и PyQt 6. Разработка приложений“.

В книге Описан язык Python 3: типы данных, операторы, условия ветвления и выбора, циклы, регулярные выражения, функции, классы, работа с файлами и каталогами, взаимодействие с механизмами Windows, часто используемые модули стандартной библиотеки. Особое внимание уделено библиотеке PyQt, позволяющей создавать приложения с графическим интерфейсом. Описаны средства для создания и вывода окон, основных компонентов (кнопок, полей, полей, списков, таблиц, меню, панелей инструментов и др.). Рассмотрена обработка событий и сигналов, разработка многопоточных программ, работа с базами данных, вывод графики, воспроизведение мультимедиа, запись аудио, видео и фото, печать документов, экспорт их в формат Adobe PDF и сохранения настроек программ. Дан пример полнофункционального приложения для создания и решения головоломок судоку. На сайте издательства размещен электронный архив со всеми примерами из книги.

Вы изучите:

Книгу “Python 3 и PyQt 6. Разработка приложений” можно купить со скидкой в интернет-магазине издательства “БХВ”.

Предисловие…………………………………………………………………………………………… 15

Python………………………………………………………………………………………………………………………………………….. 15

PyQt……………………………………………………………………………………………………………………………………………… 16

Использованное ПО…………………………………………………………………………………………………………………… 16

Типографские соглашения………………………………………………………………………………………………………… 16

Часть I. Основы языка Python………………………………………………….. 19

Глава 1. Первые шаги……………………………………………………………………………. 21

1.1. Установка Python………………………………………………………………………………………………………………… 21

1.2. Интерактивный режим Python. Утилита IDLE…………………………………………………………………. 24

1.3. Введение в Python-программирование……………………………………………………………………………… 25

1.4. Принципы написания Python-программ……………………………………………………………………………. 27

1.4.1. Комментарии и строки документирования…………………………………………………………….. 30

1.4.2. Кодировки, поддерживаемые Python………………………………………………………………………. 31

1.4.3. Подготовка Python-программ для выполнения в UNIX…………………………………………. 31

1.5. Дополнительные возможности IDLE………………………………………………………………………………… 32

1.6. Вывод данных……………………………………………………………………………………………………………………… 33

1.7. Ввод данных………………………………………………………………………………………………………………………… 35

1.8. Утилита pip: установка дополнительных библиотек……………………………………………………… 37

1.9. Доступ к документации………………………………………………………………………………………………………. 42

1.10. Компиляция Python-файлов……………………………………………………………………………………………… 44

Глава 2. Переменные и типы данных…………………………………………………….. 46

2.1. Переменные…………………………………………………………………………………………………………………………. 46

2.2. Типы данных. Понятие объекта и ссылки…………………………………………………………………………. 47

2.3. Присваивание значений переменным……………………………………………………………………………….. 50

2.4. Проверка типа данных……………………………………………………………………………………………………….. 52

2.5. Преобразование типов данных………………………………………………………………………………………….. 53

2.6. Удаление переменных………………………………………………………………………………………………………… 56

Глава 3. Операторы……………………………………………………………………………….. 57

3.1. Математические операторы………………………………………………………………………………………………. 57

3.2. Двоичные операторы………………………………………………………………………………………………………….. 59

3.3. Операторы для работы с последовательностями……………………………………………………………. 60

3.4. Операторы присваивания…………………………………………………………………………………………………… 61

3.5. Пустой оператор…………………………………………………………………………………………………………………. 63

3.6. Приоритет операторов……………………………………………………………………………………………………….. 63

Глава 4. Инструкции ветвления, выбора и циклы…………………………………. 65

4.1. Операторы сравнения…………………………………………………………………………………………………………. 66

4.2. Инструкция ветвления………………………………………………………………………………………………………… 68

4.3. Инструкция выбора…………………………………………………………………………………………………………….. 71

4.4. Цикл перебора последовательности…………………………………………………………………………………. 77

4.5. Цикл с условием………………………………………………………………………………………………………………….. 78

4.6. Оператор continue: переход на следующую итерацию цикла……………………………………….. 79

4.7. Оператор break: прерывание цикла………………………………………………………………………………….. 79

4.8. Оператор присваивания в составе инструкции………………………………………………………………… 80

Глава 5. Числа……………………………………………………………………………………….. 82

5.1. Запись чисел………………………………………………………………………………………………………………………… 82

5.2. Обработка чисел…………………………………………………………………………………………………………………. 84

5.3. Математические функции………………………………………………………………………………………………….. 87

5.4. Генерирование случайных чисел……………………………………………………………………………………… 89

Глава 6. Строки и двоичные данные……………………………………………………… 92

6.1. Создание строк……………………………………………………………………………………………………………………. 92

6.1.1. Специальные символы……………………………………………………………………………………………… 94

6.1.2. Необрабатываемые строки……………………………………………………………………………………… 95

6.2. Операции над строками……………………………………………………………………………………………………… 96

6.3. Форматирование строк………………………………………………………………………………………………………. 98

6.4. Метод format()…………………………………………………………………………………………………………………… 104

6.4.1. Форматируемые строки………………………………………………………………………………………….. 108

6.5. Функции и методы для работы со строками…………………………………………………………………… 109

6.6. Настройка локали…………………………………………………………………………………………………………….. 112

6.7. Изменение регистра символов…………………………………………………………………………………………. 113

6.8. Функции для работы с символами…………………………………………………………………………………… 114

6.9. Поиск и замена в строке……………………………………………………………………………………………………. 114

6.10. Проверка содержимого строки………………………………………………………………………………………. 118

6.11. Двоичные данные типа bytes…………………………………………………………………………………………. 121

6.12. Двоичные данные типа bytearray………………………………………………………………………………….. 125

6.13. Сериализация и десериализация значений………………………………………………………………….. 128

6.14. Хеширование значений………………………………………………………………………………………………….. 129

Глава 7. Регулярные выражения………………………………………………………….. 131

7.1. Синтаксис регулярных выражений…………………………………………………………………………………. 131

7.2. Поиск первого совпадения с шаблоном………………………………………………………………………….. 140

7.3. Поиск всех совпадений с шаблоном……………………………………………………………………………….. 145

7.4. Замена в строке…………………………………………………………………………………………………………………. 146

7.5. Прочие функции и методы……………………………………………………………………………………………….. 148

Глава 8. Списки, кортежи, множества и диапазоны…………………………….. 150

8.1. Создание списков……………………………………………………………………………………………………………… 150

8.2. Операции над списками……………………………………………………………………………………………………. 152

8.3. Многомерные списки………………………………………………………………………………………………………… 155

8.4. Перебор списков……………………………………………………………………………………………………………….. 155

8.5. Генераторы списков и выражения-генераторы……………………………………………………………… 156

8.6. Функции map(), zip(), filter() и reduce()…………………………………………………………………………….. 158

8.7. Добавление и удаление элементов списка……………………………………………………………………… 161

8.8. Поиск элемента в списке и получение сведений об элементах списка………………………… 163

8.9. Переворачивание и перемешивание списка…………………………………………………………………… 164

8.10. Выбор элементов списка случайным образом…………………………………………………………….. 165

8.11. Сортировка списка…………………………………………………………………………………………………………. 166

8.12. Заполнение списка числами………………………………………………………………………………………….. 168

8.13. Преобразование списка в строку…………………………………………………………………………………… 168

8.14. Кортежи…………………………………………………………………………………………………………………………… 169

8.15. Множества, изменяемые и неизменяемые…………………………………………………………………….. 170

8.16. Диапазоны……………………………………………………………………………………………………………………….. 175

8.17. Модуль itertools………………………………………………………………………………………………………………. 177

8.17.1. Генерирование неопределенного количества значений…………………………………. 177

8.17.2. Генерирование комбинаций значений……………………………………………………………… 178

8.17.3. Фильтрация элементов последовательности…………………………………………………… 180

8.17.4. Прочие функции………………………………………………………………………………………………….. 181

Глава 9. Словари………………………………………………………………………………….. 185

9.1. Создание словаря……………………………………………………………………………………………………………… 185

9.2. Операции над словарями…………………………………………………………………………………………………. 187

9.3. Перебор элементов словаря…………………………………………………………………………………………….. 189

9.4. Методы и функции для работы со словарями………………………………………………………………… 190

9.5. Генераторы словарей……………………………………………………………………………………………………….. 193

Глава 10. Работа с датой и временем……………………………………………………. 194

10.1. Получение текущих даты и времени…………………………………………………………………………….. 194

10.2. Форматирование даты и времени………………………………………………………………………………….. 196

10.3. Приостановка выполнения программы………………………………………………………………………… 198

10.4. Значения даты и времени……………………………………………………………………………………………….. 198

10.4.1. Временне промежутки……………………………………………………………………………………… 198

10.4.2. Значения даты…………………………………………………………………………………………………….. 201

10.4.3. Значения времени……………………………………………………………………………………………….. 204

10.4.4. Временне отметки…………………………………………………………………………………………….. 207

10.5. Вывод календаря…………………………………………………………………………………………………………….. 213

10.5.1. Вывод календаря в текстовом виде…………………………………………………………………… 213

10.5.2. Вывод календаря в формате HTML………………………………………………………………….. 215

10.5.3. Другие полезные функции………………………………………………………………………………….. 217

10.6. Измерение времени выполнения фрагментов кода………………………………………………………. 220

Глава 11. Функции………………………………………………………………………………. 222

11.1. Определение и вызов функции……………………………………………………………………………………….. 222

11.1.1. Расположение определений функций……………………………………………………………….. 224

11.1.2. Локальные и глобальные переменные……………………………………………………………… 225

11.1.3. Позиционные и именованные параметры………………………………………………………… 228

11.1.4. Необязательные параметры………………………………………………………………………………. 230

11.1.5. Произвольное количество параметров…………………………………………………………….. 231

11.1.6. Распаковка последовательностей и отображений………………………………………….. 233

11.1.7. Функция как значение. Функции обратного вызова………………………………………… 233

11.2. Анонимные функции……………………………………………………………………………………………………….. 234

11.3. Функции-генераторы………………………………………………………………………………………………………. 236

11.4. Декораторы функций……………………………………………………………………………………………………… 237

11.5. Рекурсия…………………………………………………………………………………………………………………………… 239

11.6. Вложенные функции……………………………………………………………………………………………………….. 240

11.7. Аннотации функций………………………………………………………………………………………………………… 242

Глава 12. Модули, пакеты и импорт…………………………………………………….. 243

12.1. Импорт модуля целиком…………………………………………………………………………………………………. 243

12.2. Импорт отдельных идентификаторов…………………………………………………………………………… 246

12.2.1. Указание идентификаторов, доступных для импорта…………………………………….. 248

12.2.2. Управление доступом к идентификаторам………………………………………………………. 248

12.3. Пути поиска модулей……………………………………………………………………………………………………… 249

12.4. Перезагрузка модулей……………………………………………………………………………………………………. 251

12.5. Пакеты……………………………………………………………………………………………………………………………… 252

Глава 13. Объекты и классы………………………………………………………………… 256

13.1. Определение классов, создание объектов и работа с ними………………………………………… 256

13.2. Атрибуты класса…………………………………………………………………………………………………………….. 259

13.3. Конструкторы и деструкторы……………………………………………………………………………………….. 260

13.4. Наследование………………………………………………………………………………………………………………….. 261

13.4.1. Множественное наследование………………………………………………………………………….. 263

13.4.1.1. Примеси и их использование………………………………………………………………. 265

13.5. Специальные методы……………………………………………………………………………………………………… 266

13.6. Перегрузка операторов………………………………………………………………………………………………….. 269

13.7. Статические методы и методы класса………………………………………………………………………….. 271

13.8. Абстрактные методы………………………………………………………………………………………………………. 272

13.9. Закрытые атрибуты и методы……………………………………………………………………………………….. 273

13.10. Свойства………………………………………………………………………………………………………………………… 274

13.11. Декораторы классов…………………………………………………………………………………………………….. 276

Глава 14. Исключения и их обработка…………………………………………………. 278

14.1. Обработчики исключений……………………………………………………………………………………………… 279

14.2. Обработчики контекстов………………………………………………………………………………………………… 283

14.3. Классы встроенных исключений…………………………………………………………………………………… 285

14.4. Генерирование исключений…………………………………………………………………………………………… 287

14.5. Пользовательские исключения………………………………………………………………………………………. 289

14.6. Проверочная инструкция……………………………………………………………………………………………….. 290

Глава 15. Итераторы, контейнеры и перечисления………………………………. 292

15.1. Итераторы……………………………………………………………………………………………………………………….. 292

15.2. Контейнеры……………………………………………………………………………………………………………………… 293

15.2.1. Контейнеры-последовательности…………………………………………………………………….. 293

15.2.2. Контейнеры-отображения…………………………………………………………………………………. 295

15.3. Перечисления………………………………………………………………………………………………………………….. 296

Глава 16. Работа с файлами и каталогами……………………………………………. 302

16.1. Открытие файлов…………………………………………………………………………………………………………….. 302

16.1.1. Указание путей к файлам и каталогам……………………………………………………………… 305

16.1.2. Текущий рабочий каталог…………………………………………………………………………………. 306

16.2. Чтение и запись данных: объектные инструменты……………………………………………………… 307

16.3. Чтение и запись данных: низкоуровневые инструменты…………………………………………….. 313

16.4. Файлы в памяти………………………………………………………………………………………………………………. 315

16.5. Задание прав доступа к файлам и каталогам………………………………………………………………. 319

16.6. Работа с файлами……………………………………………………………………………………………………………. 321

16.7. Работа с путями………………………………………………………………………………………………………………. 325

16.8. Перенаправление ввода/вывода……………………………………………………………………………………. 326

16.9. Сохранение объектов в файлах…………………………………………………………………………………….. 328

16.10. Работа с каталогами…………………………………………………………………………………………………….. 331

16.10.1. Функция scandir()……………………………………………………………………………………………… 335

16.11. Исключения, генерируемые файловыми операциями……………………………………………….. 337

Глава 17. Работа с механизмами Windows…………………………………………….. 338

17.1. Работа с реестром…………………………………………………………………………………………………………… 338

17.1.1. Открытие и закрытие ветвей реестра………………………………………………………………… 339

17.1.2. Чтение и запись данных реестра……………………………………………………………………….. 340

17.1.3. Перебор элементов и вложенных ветвей реестра……………………………………………. 343

17.2. Получение путей к системным каталогам……………………………………………………………………. 344

17.3. Создание ярлыков…………………………………………………………………………………………………………… 345

Часть II. Библиотека PyQt 6………………………………………………………. 347

Глава 18. Введение в PyQt 6…………………………………………………………………. 349

18.1. Установка PyQt 6…………………………………………………………………………………………………………….. 349

18.2. Первая оконная программа……………………………………………………………………………………………. 349

18.3. Структура PyQt-программы…………………………………………………………………………………………… 350

18.4. ООП-стиль создания окна………………………………………………………………………………………………. 352

18.5. Создание окон с помощью программы Qt Designer……………………………………………………… 356

18.5.1. Создание окон…………………………………………………………………………………………………….. 356

18.5.2. Использование UI-файла в программе……………………………………………………………… 359

18.5.3. Преобразование UI-файла в модуль Python…………………………………………………….. 361

18.6. Модули PyQt 6………………………………………………………………………………………………………………… 362

18.7. Управление циклом обработки событий………………………………………………………………………. 363

18.8. Многопоточные программы………………………………………………………………………………………….. 365

18.8.1. Потоки………………………………………………………………………………………………………………….. 365

18.8.2. Управление потоками………………………………………………………………………………………… 368

18.8.3. Очереди……………………………………………………………………………………………………………….. 372

18.8.4. Блокировщики и автоблокировщики………………………………………………………………… 376

18.9. Вывод заставки……………………………………………………………………………………………………………….. 379

Глава 19. Окна…………………………………………………………………………………….. 382

19.1. Создание и вывод окон…………………………………………………………………………………………………… 382

19.1.1. Типы окон……………………………………………………………………………………………………………. 383

19.2. Размеры окон и управление ими……………………………………………………………………………………. 384

19.3. Местоположение окна и управление им………………………………………………………………………. 387

19.4. Классы, задающие координаты и размеры………………………………………………………………….. 390

19.4.1. Класс QPoint: координаты точки……………………………………………………………………… 390

19.4.2. Класс QSize: размеры прямоугольной области……………………………………………….. 391

19.4.3. Класс QRect: координаты и размеры прямоугольной области………………………. 393

19.5. Разворачивание и сворачивание окон………………………………………………………………………….. 399

19.6. Управление прозрачностью окна………………………………………………………………………………….. 401

19.7. Модальные окна……………………………………………………………………………………………………………… 401

19.8. Смена значка окна………………………………………………………………………………………………………….. 403

19.9. Изменение цвета фона окна……………………………………………………………………………………………. 404

19.10. Вывод изображения в качестве фона………………………………………………………………………….. 405

19.11. Окна произвольной формы…………………………………………………………………………………………… 406

19.12. Всплывающие и расширенные подсказки………………………………………………………………….. 408

19.13. Программное закрытие окна……………………………………………………………………………………….. 409

19.14. Использование таблиц стилей CSS для оформления окон………………………………………… 409

Глава 20. Обработка сигналов и событий…………………………………………….. 414

20.1. Назначение обработчиков сигналов…………………………………………………………………………….. 414

20.1.1. Слоты…………………………………………………………………………………………………………………… 417

20.1.2. Передача данных в обработчик сигнала…………………………………………………………. 418

20.2. Блокировка и удаление обработчиков сигналов…………………………………………………………. 419

20.3. Генерирование сигналов………………………………………………………………………………………………… 421

20.4. Пользовательские сигналы…………………………………………………………………………………………….. 421

20.5. Использование таймеров……………………………………………………………………………………………….. 423

20.6. Обработка всех событий………………………………………………………………………………………………… 426

20.7. События окна………………………………………………………………………………………………………………….. 429

20.7.1. Изменение состояния окна…………………………………………………………………………………. 429

20.7.2. Изменение местоположения и размеров окна………………………………………………….. 430

20.7.3. Перерисовка окна или его части……………………………………………………………………….. 431

20.7.4. Предотвращение закрытия окна……………………………………………………………………….. 431

20.8. События клавиатуры……………………………………………………………………………………………………… 432

20.8.1. Управление фокусом ввода……………………………………………………………………………….. 432

20.8.2. Назначение клавиш быстрого доступа…………………………………………………………….. 435

20.8.3. Нажатие и отпускание клавиш………………………………………………………………………….. 437

20.9. События мыши………………………………………………………………………………………………………………… 439

20.9.1. Нажатие и отпускание кнопок мыши……………………………………………………………….. 439

20.9.2. Перемещение курсора мыши……………………………………………………………………………… 440

20.9.3. Наведение и увод курсора мыши………………………………………………………………………. 441

20.9.4. Прокрутка колесика мыши………………………………………………………………………………… 441

20.9.5. Изменение курсора мыши………………………………………………………………………………….. 442

20.10. Операция перетаскивания (drag & drop)……………………………………………………………………… 443

20.10.1. Запуск перетаскивания…………………………………………………………………………………….. 443

20.10.1.1. Задание перетаскиваемых данных………………………………………………….. 445

20.10.2. Обработка перетаскивания и сброса……………………………………………………………… 446

20.11. Работа с буфером обмена…………………………………………………………………………………………….. 448

20.12. Фильтрация событий……………………………………………………………………………………………………. 449

20.13. Генерирование событий………………………………………………………………………………………………. 450

20.14. Пользовательские события………………………………………………………………………………………….. 450

Глава 21. Размещение компонентов в окнах. Контейнеры…………………… 451

21.1. Абсолютное позиционирование……………………………………………………………………………………. 451

21.2. Контейнерыстопки………………………………………………………………………………………………………… 452

21.3. Контейнер-сетка……………………………………………………………………………………………………………… 455

21.4. Контейнер-форма……………………………………………………………………………………………………………. 457

21.5. Стеки………………………………………………………………………………………………………………………………… 460

21.6. Управление размерами компонентов……………………………………………………………………………. 461

21.7. Группа……………………………………………………………………………………………………………………………… 462

21.8. Панель с рамкой……………………………………………………………………………………………………………… 464

21.9. Панель с вкладками………………………………………………………………………………………………………… 465

21.10. Аккордеон……………………………………………………………………………………………………………………… 469

21.11. Панель с изменяемыми областями………………………………………………………………………………. 471

21.12. Прокручиваемая панель………………………………………………………………………………………………. 473

Глава 22. Основные компоненты…………………………………………………………. 475

22.1. Надпись……………………………………………………………………………………………………………………………. 475

22.2. Кнопка……………………………………………………………………………………………………………………………… 477

22.3. Переключатель……………………………………………………………………………………………………………….. 479

22.4. Флажок…………………………………………………………………………………………………………………………….. 480

22.5. Поле ввода……………………………………………………………………………………………………………………….. 480

22.5.1. Основные методы и сигналы……………………………………………………………………………… 481

22.5.2. Ввод данных по маске………………………………………………………………………………………… 484

22.5.3. Контроль ввода с помощью валидаторов………………………………………………………… 485

22.6. Область редактирования……………………………………………………………………………………………….. 486

22.6.1. Основные методы и сигналы……………………………………………………………………………… 486

22.6.2. Задание параметров области редактирования……………………………………………….. 488

22.6.3. Указание параметров текста и фона…………………………………………………………………. 490

22.6.4. Класс QTextDocument…………………………………………………………………………………………. 491

22.6.5. Класс QTextCursor………………………………………………………………………………………………. 494

22.7. Текстовый браузер………………………………………………………………………………………………………….. 497

22.8. Поля для ввода целых и вещественных чисел……………………………………………………………… 499

22.9. Поля для ввода даты и времени…………………………………………………………………………………….. 501

22.10. Календарь……………………………………………………………………………………………………………………… 504

22.11. Семисегментный индикатор………………………………………………………………………………………… 506

22.12. Индикатор процесса…………………………………………………………………………………………………….. 507

22.13. Шкала с ползунком………………………………………………………………………………………………………. 508

22.14. Круговая шкала с ползунком………………………………………………………………………………………. 510

22.15. Полоса прокрутки…………………………………………………………………………………………………………. 511

22.16. Веб-браузер…………………………………………………………………………………………………………………… 511

Глава 23. Списки и таблицы………………………………………………………………… 516

23.1. Раскрывающийся список………………………………………………………………………………………………… 516

23.1.1. Добавление, изменение и удаление элементов………………………………………………… 516

23.1.2. Изменение параметров списка…………………………………………………………………………… 517

23.1.3. Поиск элементов…………………………………………………………………………………………………. 518

23.1.4. Сигналы……………………………………………………………………………………………………………….. 519

23.2. Список для выбора шрифта…………………………………………………………………………………………… 519

23.3. Роли элементов……………………………………………………………………………………………………………….. 520

23.4. Модели…………………………………………………………………………………………………………………………….. 521

23.4.1. Доступ к данным внутри модели………………………………………………………………………. 521

23.4.2. Класс QStringListModel……………………………………………………………………………………… 523

22.4.3. Класс QStandardItemModel………………………………………………………………………………… 524

23.4.4. Класс QStandardItem………………………………………………………………………………………….. 528

23.5. Представления………………………………………………………………………………………………………………… 531

23.5.1. Класс QAbstractItemView……………………………………………………………………………………. 532

23.5.2. Простой список…………………………………………………………………………………………………… 535

23.5.3. Таблица……………………………………………………………………………………………………………….. 537

23.5.4. Иерархический список……………………………………………………………………………………….. 539

23.5.5. Управление заголовками строк и столбцов……………………………………………………… 541

23.6. Управление выделением элементов………………………………………………………………………………. 544

22.7. Промежуточные модели…………………………………………………………………………………………………. 546

23.8. Использование делегатов………………………………………………………………………………………………. 547

Глава 24. Работа с базами данных……………………………………………………….. 551

24.1. Соединение с базой данных…………………………………………………………………………………………… 551

24.2. Получение сведений о структуре таблиц……………………………………………………………………… 554

24.2.1. Получение сведений о таблицах……………………………………………………………………….. 554

24.2.2. Получение сведений о полях таблиц………………………………………………………………… 555

24.2.3. Получение сведений о ключевом индексе………………………………………………………… 556

24.2.4. Получение сведений об ошибке………………………………………………………………………… 556

24.3. Выполнение SQL-запросов и получение их результатов……………………………………………. 557

24.3.1. Выполнение запросов………………………………………………………………………………………… 557

24.3.2. Обработка результатов выполнения запросов………………………………………………… 560

24.3.3. Очистка запроса…………………………………………………………………………………………………. 562

24.3.4. Получение служебных сведений о запросе……………………………………………………… 563

24.4. Модели, связанные с данными………………………………………………………………………………………. 563

24.4.1. Модель, связанная с SQL-запросом………………………………………………………………….. 563

24.4.2. Модель, связанная с таблицей…………………………………………………………………………… 565

24.4.3. Модель, поддерживающая межтабличные связи…………………………………………….. 570

24.4.4. Использование связанных делегатов………………………………………………………………… 573

Глава 25. Работа с графикой………………………………………………………………… 575

25.1. Вспомогательные классы………………………………………………………………………………………………. 575

25.1.1. Класс QColor: цвет……………………………………………………………………………………………… 575

25.1.2. Класс QPen: перо………………………………………………………………………………………………… 579

25.1.3. Класс QBrush: кисть……………………………………………………………………………………………. 580

25.1.4. Класс QLine: линия…………………………………………………………………………………………….. 581

24.1.5. Класс QPolygon: многоугольник……………………………………………………………………….. 582

25.1.6. Класс QFont: шрифт…………………………………………………………………………………………… 584

25.2. Класс QPainter………………………………………………………………………………………………………………… 586

25.2.1. Рисование линий и фигур…………………………………………………………………………………… 587

25.2.2. Вывод текста……………………………………………………………………………………………………….. 589

25.2.3. Вывод изображений……………………………………………………………………………………………. 590

25.2.4. Преобразование систем координат…………………………………………………………………… 592

25.2.5. Сохранение команд рисования в файл……………………………………………………………… 593

25.3. Работа с растровыми изображениями………………………………………………………………………….. 594

25.3.1. Класс QPixmap……………………………………………………………………………………………………. 594

25.3.2. Класс QBitmap…………………………………………………………………………………………………….. 597

25.3.3. Класс QImage………………………………………………………………………………………………………. 598

25.3.4. Класс QIcon…………………………………………………………………………………………………………. 601

Глава 26. Графическая сцена……………………………………………………………….. 603

26.1. Графическая сцена…………………………………………………………………………………………………………. 603

26.1.1. Настройка графической сцены………………………………………………………………………….. 603

26.1.2. Добавление и удаление графических объектов……………………………………………….. 604

26.1.3. Добавление компонентов на сцену…………………………………………………………………… 605

26.1.4. Поиск графических объектов…………………………………………………………………………….. 605

26.1.5. Управление фокусом ввода……………………………………………………………………………….. 607

26.1.6. Управление выделением объектов……………………………………………………………………. 607

26.1.7. Прочие методы и сигналы………………………………………………………………………………….. 608

26.2. Графическое представление………………………………………………………………………………………….. 609

26.2.1. Настройка графического представления…………………………………………………………. 609

26.2.2. Преобразования между координатами представления и сцены…………………….. 611

26.2.3. Поиск объектов……………………………………………………………………………………………………. 612

26.2.4. Преобразование системы координат………………………………………………………………… 612

26.2.5. Прочие методы……………………………………………………………………………………………………. 613

26.3. Графические объекты…………………………………………………………………………………………………….. 614

26.3.1. Класс QGraphicsItem: базовый класс для графических объектов………………….. 614

26.3.1.1. Настройка графического объекта………………………………………………………. 614

26.3.1.2. Выполнение преобразований……………………………………………………………… 616

26.3.1.3. Прочие методы…………………………………………………………………………………….. 617

26.3.2. Готовые графические объекты………………………………………………………………………….. 618

26.3.2.1. Линия…………………………………………………………………………………………………….. 618

26.3.2.2. Класс QAbstractGraphicsShapeItem……………………………………………………. 618

26.3.2.3. Прямоугольник…………………………………………………………………………………….. 619

26.3.2.4. Многоугольник…………………………………………………………………………………….. 619

26.3.2.5. Эллипс…………………………………………………………………………………………………… 619

26.3.2.6. Изображение………………………………………………………………………………………… 620

26.3.2.7. Простой текст……………………………………………………………………………………….. 621

26.3.2.8. Форматированный текст……………………………………………………………………… 621

26.4. Группировка объектов……………………………………………………………………………………………………. 622

26.5. Эффекты…………………………………………………………………………………………………………………………… 623

26.5.1. Класс QGraphicsEffect………………………………………………………………………………………… 623

26.5.2. Тень………………………………………………………………………………………………………………………. 624

26.5.3. Размытие……………………………………………………………………………………………………………… 625

26.5.4. Изменение цвета………………………………………………………………………………………………….. 625

26.5.5. Изменение прозрачности……………………………………………………………………………………. 625

26.6. Обработка событий………………………………………………………………………………………………………… 626

26.6.1. События клавиатуры………………………………………………………………………………………….. 626

26.6.2. События мыши……………………………………………………………………………………………………. 627

26.6.3. Обработка перетаскивания и сброса………………………………………………………………… 630

26.6.4. Фильтрация событий………………………………………………………………………………………….. 631

26.6.5. Обработка изменения состояния объекта………………………………………………………… 631

Глава 27. Диалоговые окна………………………………………………………………….. 634

27.1. Пользовательские диалоговые окна……………………………………………………………………………… 634

27.2. Класс QDialogButtonBox………………………………………………………………………………………………… 636

27.3. Класс QMessageBox………………………………………………………………………………………………………… 639

27.3.1. Основные методы и сигналы……………………………………………………………………………… 640

27.3.2. Окно информационного сообщения………………………………………………………………….. 642

27.3.3. Окно подтверждения…………………………………………………………………………………………… 643

27.3.4. Окно предупреждающего сообщения……………………………………………………………….. 644

27.3.5. Окно критического сообщения………………………………………………………………………….. 644

27.3.6. Окно сведений о программе……………………………………………………………………………….. 645

27.3.7. Окно сведений о фреймворке Qt………………………………………………………………………… 645

27.4. Класс QInputDialog………………………………………………………………………………………………………… 646

27.4.1. Основные методы и сигналы……………………………………………………………………………… 647

27.4.2. Окно для ввода строки……………………………………………………………………………………….. 649

27.4.3. Окно для ввода целого числа…………………………………………………………………………….. 649

27.4.4. Окно для ввода вещественного числа……………………………………………………………….. 650

27.4.5. Окно для выбора пункта из списка……………………………………………………………………. 651

27.4.6. Окно для ввода большого текста………………………………………………………………………. 651

27.5. Класс QFileDialog…………………………………………………………………………………………………………… 652

27.5.1. Основные методы и сигналы……………………………………………………………………………… 653

27.5.2. Окно для выбора каталога…………………………………………………………………………………. 655

27.5.3. Окно для открытия файлов………………………………………………………………………………… 656

27.5.4. Окно для сохранения файла………………………………………………………………………………. 658

27.6. Окно для выбора цвета…………………………………………………………………………………………………… 659

27.7. Окно для выбора шрифта……………………………………………………………………………………………….. 660

27.8. Окно для вывода сообщения об ошибке……………………………………………………………………….. 661

27.9. Окно с индикатором хода процесса……………………………………………………………………………… 662

27.10. Создание многостраничного мастера………………………………………………………………………… 663

27.10.1. Класс QWizard…………………………………………………………………………………………………… 663

27.10.2. Класс QWizardPage………………………………………………………………………………………….. 667

Глава 28. Создание SDI- и MDI-программ…………………………………………….. 670

28.1. Главное окно программы……………………………………………………………………………………………….. 670

28.2. Меню и действия…………………………………………………………………………………………………………….. 675

28.2.1. Класс QMenuBar…………………………………………………………………………………………………. 675

28.2.2. Класс QMenu……………………………………………………………………………………………………….. 676

28.2.3. Контекстное меню компонента…………………………………………………………………………. 679

28.2.4. Класс QAction……………………………………………………………………………………………………… 680

28.2.5. Объединение действий-переключателей в группу…………………………………………… 683

28.3. Панели инструментов…………………………………………………………………………………………………….. 684

28.3.1. Класс QToolBar…………………………………………………………………………………………………… 685

28.3.2. Класс QToolButton……………………………………………………………………………………………… 686

28.4. Прикрепляемые панели………………………………………………………………………………………………….. 688

28.5. Строка состояния……………………………………………………………………………………………………………. 689

28.6. MDI-программы………………………………………………………………………………………………………………. 690

28.6.1. Класс QMdiArea………………………………………………………………………………………………….. 690

28.6.2. Класс QMdiSubWindow………………………………………………………………………………………. 693

28.7. Добавление значка программы в область уведомлений…………………………………………….. 694

Глава 29. Мультимедиа………………………………………………………………………… 696

29.1. Воспроизведение мультимедиа……………………………………………………………………………………… 696

29.1.1. Мультимедийный проигрыватель…………………………………………………………………….. 696

29.1.2. Звуковой выход. Воспроизведение звука…………………………………………………………. 699

29.1.3. Метаданные мультимедийного источника………………………………………………………. 704

29.1.4. Видеопанель. Воспроизведение видео……………………………………………………………… 707

29.2. Запись мультимедиа……………………………………………………………………………………………………….. 709

29.2.1. Транспорт……………………………………………………………………………………………………………. 709

29.2.2. Звуковой вход……………………………………………………………………………………………………… 710

29.2.3. Кодировщик звука и видео…………………………………………………………………………………. 710

29.2.4. Указание форматов кодирования. Запись звука………………………………………………. 712

29.2.5. Камера. Запись видео…………………………………………………………………………………………. 716

29.2.6. Кодировщик статичных изображений. Захват фото……………………………………….. 720

29.3. Воспроизведение звуковых эффектов……………………………………………………………………………. 722

Глава 30. Печать документов……………………………………………………………….. 726

30.1. Основные средства печати…………………………………………………………………………………………….. 726

30.1.1. Класс QPrinter…………………………………………………………………………………………………….. 726

30.1.2. Вывод на печать…………………………………………………………………………………………………. 729

30.1.3. Служебные классы……………………………………………………………………………………………… 735

30.1.3.1. Класс QPageSize…………………………………………………………………………………… 735

30.1.3.2. Класс QPageLayout……………………………………………………………………………… 737

30.2. Задание параметров принтера и страницы………………………………………………………………….. 739

30.2.1. Класс QPrintDialog…………………………………………………………………………………………….. 739

30.2.2. Класс QPageSetupDialog……………………………………………………………………………………. 740

30.3. Предварительный просмотр………………………………………………………………………………………….. 742

30.3.1. Класс QPrintPreviewDialog……………………………………………………………………………….. 742

30.3.2. Класс QPrintPreviewWidget……………………………………………………………………………….. 745

30.4. Класс QPrinterInfo: получение сведений об устройстве печати………………………………… 747

30.5. Класс QPdfWriter: экспорт в формат PDF…………………………………………………………………….. 749

Глава 31. Сохранение настроек программ……………………………………………. 752

31.1. Создание объекта класса QSettings………………………………………………………………………………. 752

31.2. Запись и чтение данных…………………………………………………………………………………………………. 753

31.2.1. Базовые средства записи и чтения данных………………………………………………………. 753

31.2.2. Группировка сохраняемых значений. Ключи………………………………………………….. 755

31.2.3. Запись списков……………………………………………………………………………………………………. 757

31.3. Вспомогательные методы класса QSettings…………………………………………………………………. 759

31.4. Где хранятся настройки?……………………………………………………………………………………………….. 759

Глава 32. Программа «Судоку»……………………………………………………………. 761

32.1. Правила судоку………………………………………………………………………………………………………………. 761

32.2. Описание программы «Судоку»…………………………………………………………………………………….. 762

32.3. Разработка программы…………………………………………………………………………………………………… 764

32.3.1. Подготовительные действия………………………………………………………………………………. 764

32.3.2. Класс MyLabel: ячейка поля судоку…………………………………………………………………. 764

32.3.3. Класс Widget: поле судоку………………………………………………………………………………… 768

32.3.3.1. Конструктор класса Widget………………………………………………………………… 769

32.3.3.2. Прочие методы класса Widget……………………………………………………………. 771

32.3.4. Класс MainWindow: основное окно программы………………………………………………. 775

32.3.4.1. Конструктор класса MainWindow……………………………………………………… 776

32.3.4.2. Остальные методы класса MainWindow……………………………………………. 779

32.3.5. Главный модуль………………………………………………………………………………………………….. 779

32.3.6. Копирование и вставка головоломок……………………………………………………………….. 780

32.3.6.1. Форматы данных…………………………………………………………………………………. 780

32.3.6.2. Реализация копирования и вставки в классе Widget…………………………. 780

32.3.6.3. Реализация копирования и вставки в классе MainWindow………………. 783

32.3.7. Сохранение и загрузка данных…………………………………………………………………………. 787

32.3.8. Печать и предварительный просмотр………………………………………………………………. 789

32.3.8.1. Реализация печати в классе Widget……………………………………………………. 790

32.3.8.2. Класс PreviewDialog: диалоговое окно предварительного просмотра 791

32.3.8.3. Реализация печати в классе MainWindow…………………………………………. 794

Заключение………………………………………………………………………………………….. 796

Приложение. Описание электронного архива………………………………………. 797

Предметный указатель…………………………………………………………………………. 798

Опубликовано

Вышла книга “Обучение с подкреплением для реальных задач”

Обучение с подкреплением для реальных задач

В нашем издательстве вышла книга Фила Уиндера “Обучение с подкреплением для реальных задач“.

Книга посвящена промышленно-ориентированному применению обучения с подкреплением (Reinforcement Learning, RL). Объяснено, как обучать промышленные и научные системы решению любых пошаговых задач методом проб и ошибок – без  подготовки узкоспециализированных учебных множеств данных и без риска переобучить или переусложнить алгоритм. Рассмотрены марковские процессы принятия решений, глубокие Q-сети, градиенты политик и их вычисление, методы устранения энтропии и многое другое. Данная  книга – первая на русском языке, где теоретический базис RL и  алгоритмы даны  в  прикладном, отраслевом ключе.

ПЕРВАЯ КНИГА на русском языке, где теоретический базис RL и  алгоритмы даны  в  прикладном, отраслевом ключе!

Оригинальное название книги “Reinforcement Learning: Industrial Applications of Intelligent Agents 1st Edition”

На сайте поддержки книги Reinforcement Learning Book Supplementary Materials вы найдете дополнительные материалы от автора.

На обложке африканский пингвин (Spheniscus demersus). Четыре вида рода Spheniscus известны как полосатые пингвины из-за черной полосы, опоясывающей их тела.  Пингвины живут колониями вдоль юго-западного побережья Африки, в основном на 24 островах, и лишь несколько колоний на материке. Вид занесён в Международную Красную книгу.

RL интересно тем, что позволяет изучить долгосрочные стратегии и применить их к сложным промышленным задачам. Как компании, так и специалисты-практики могут преследовать цели, которые напрямую связаны с бизнесом, такие как извлечение прибыли, наращивание количества пользователей и их удержание, а не технические показатели оценки, такие как точность или F-мера. Проще говоря, решение многих проблем зависит от последовательного принятия решений. ML не предназначено для решения этих проблем, RL — предназначено.

Кому следует прочитать эту книгу?

Цель этой книги — продвигать использование RL в производственных системах.
Если вы (сейчас или в будущем) создаете продукты в области RL, будь то исследования, разработки или прикладные вещи, то эта книга для вас. Это также означает, что я написал книгу, скорее, для практиков, чем для людей из академических кругов.

Phil Winder

Фил Уиндер — междисциплинарный инженер, эксперт и автор онлайн-курсов на платформе O’Reilly. Возглавляет компанию Winder Research, оказывающую консультации в области науки о данных (data science) для облачно-ориентированных приложений. Компания помогает оптимизировать процессы, связанные с обработкой данных, а также обслуживает платформы и продукты, работающие в этой нише. Автор имеет степени PhD и MEng в электротехнике, полученные в Университете Халла.

Книгу “Обучение с подкреплением для реальных задач” можно купить со скидкой в интернет-магазине издательства “БХВ”.

Отзывы………………………………………………………………………………………………….. 15

Об авторе……………………………………………………………………………………………….. 19

Предисловие…………………………………………………………………………………………… 21

Цель…………………………………………………………………………………………………………………………………………….. 21

Кому следует прочитать эту книгу?………………………………………………………………………………………… 22

Руководящие принципы и стиль……………………………………………………………………………………………….. 22

Предварительная подготовка…………………………………………………………………………………………………… 24

Объем и план………………………………………………………………………………………………………………………………. 24

Дополнительные материалы…………………………………………………………………………………………………….. 25

Условные обозначения, используемые в этой книге………………………………………………………………. 26

Аббревиатуры………………………………………………………………………………………………………………………. 26

Математические обозначения…………………………………………………………………………………………….. 27

Глава 1. Для чего нужно обучение с подкреплением?…………………………….. 29

Почему сейчас?………………………………………………………………………………………………………………………….. 30

Машинное обучение………………………………………………………………………………………………………………….. 31

Обучение с подкреплением……………………………………………………………………………………………………….. 32

Когда следует использовать обучение с подкреплением?……………………………………………….. 33

Варианты применения обучения с подкреплением…………………………………………………………… 35

Таксономия подходов обучения с подкреплением…………………………………………………………………. 37

Без модели или на основе модели………………………………………………………………………………………. 37

Как агенты используют и обновляют свою стратегию…………………………………………………….. 38

Дискретные или непрерывные действия…………………………………………………………………………….. 39

Методы оптимизации…………………………………………………………………………………………………………… 39

Оценка и улучшение политики……………………………………………………………………………………………. 40

Фундаментальные концепции обучения с подкреплением……………………………………………………. 41

Первый RL-алгоритм……………………………………………………………………………………………………………. 41

Оценка ценности……………………………………………………………………………………………………….. 42

Ошибка предсказания………………………………………………………………………………………………. 43

Правило обновления веса………………………………………………………………………………………… 43

RL — это то же самое, что ML?………………………………………………………………………………………….. 44

Награда и отклик…………………………………………………………………………………………………………………. 45

Отложенные награды……………………………………………………………………………………………….. 46

Ретроспектива……………………………………………………………………………………………………………. 46

Обучение с подкреплением как дисциплина…………………………………………………………………………… 47

Резюме…………………………………………………………………………………………………………………………………………. 49

Дополнительные материалы для чтения…………………………………………………………………………………. 49

Использованные источники………………………………………………………………………………………………………. 50

Глава 2. Марковские процессы принятия решений,
динамическое программирование и методы Монте-Карло……………………… 53

Алгоритм многорукого бандита……………………………………………………………………………………………….. 53

Разработка наград……………………………………………………………………………………………………………….. 53

Оценка стратегии: функция ценности………………………………………………………………………………… 54

Совершенствование политики: выбор лучшего действия………………………………………………… 57

Моделирование среды…………………………………………………………………………………………………………. 58

Запуск эксперимента……………………………………………………………………………………………………………. 59

Улучшение e-жадного алгоритма………………………………………………………………………………………. 61

Марковские процессы принятия решений……………………………………………………………………………….. 62

Контроль запасов…………………………………………………………………………………………………………………. 64

Таблица переходов…………………………………………………………………………………………………… 65

Граф переходов…………………………………………………………………………………………………………. 66

Матрица переходов………………………………………………………………………………………………….. 66

Симуляция управления запасами……………………………………………………………………………………….. 68

Политики и функции ценности………………………………………………………………………………………………….. 70

Дисконтированные вознаграждения………………………………………………………………………………….. 70

Прогнозирование вознаграждений с помощью функции ценности состояния……………….. 71

Моделирование с использованием функции ценности состояния……………………….. 73

Прогнозирование вознаграждений с помощью функции ценности действия…………………. 75

Оптимальные политики……………………………………………………………………………………………………….. 76

Генерирование политики Монте-Карло………………………………………………………………………………….. 78

Итерация по ценности с динамическим программированием……………………………………………….. 80

Реализация итерации по ценности……………………………………………………………………………………… 82

Результаты итерации по ценнности……………………………………………………………………………………. 84

Резюме…………………………………………………………………………………………………………………………………………. 85

Дополнительные материалы для чтения…………………………………………………………………………………. 86

Использованные источники………………………………………………………………………………………………………. 86

Глава 3. Обучение с учетом временных различий, Q-обучение
и n-шаговые алгоритмы…………………………………………………………………………. 87

Обучение с учетом временных различий: формулировка подхода………………………………………. 88

Q-обучение……………………………………………………………………………………………………………………………. 90

SARSA……………………………………………………………………………………………………………………………………. 92

Q-обучение против SARSA………………………………………………………………………………………………….. 93

Пример использования: автоматическое масштабирование контейнеров приложений для снижения затрат