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

Встречайте: “Go: разработка приложений в микросервисной архитектуре с нуля”

Go: разработка приложений в микросервисной архитектуре с нуля

Базовая книга по построению микросервисной архитектуры с практическими примерами на языке Go. Также рассмотрена работа с оркестратором Kubernetes и контейнерами Docker в среде Docker Compose. Разобраны основные принципы и техники разработки распределенных систем, в частности показано, как написать и развернуть четыре микросервиса, управлять СУБД, настроить брокер сообщений Kafka, внедрить кэш Redis. Объяснены паттерны проектирования. Особое внимание уделено распределенным транзакциям и разворачиванию микросервисов на удаленном сервере. Показано, как обеспечить расширяемость и отказоустойчивость приложений, поддерживая высокую скорость загрузки страниц и приложений.

Электронный архив на сайте издательства содержит дополнительные материалы к книге.

Для начинающих веб-разработчиков

Микросервисы на Go: осваиваем аккуратную декомпозицию

Современная практика enterprise-разработки и возникающие вызовы связаны, прежде всего, с обеспечением отказоустойчивости и расширяемости приложений. Сложно рассчитывать на реализацию таких качеств без применения микросервисной архитектуры. В книге по порядку рассматривается создание целого приложения с нуля. На материале готового продукта показано, как написать и развернуть четыре микросервиса, управлять СУБД, настроить брокер сообщений Kafka, внедрить кэш Redis и объединить эти решения в среде Docker-Compose и оркестраторе Kubernetes. Все паттерны, актуальные при проектировании микросервисов для веб-архитектуры, разобраны на практических примерах.

Книга интересна в качестве вводной по микросервисам на Golang и будет полезна как начинающим разработчикам, так и архитекторам, занятым модернизацией архитектуры с применением микросервисов.

Вы узнаете, как:

  • разрабатывать микросервисы на языке Go;
  • выстраивать синхронное и асинхронное взаимодействие между микросервисами;
  • выполнять распределенные транзакции;
  • организовать взаимодействие между микросервисами;
  • использовать паттерны проектирования;
  • разворачивать микросервисы в облаке;
  • использовать и настраивать Docker, Docker-Compose;
  • настраивать Kubernetes в удаленной среде.

Книгу “Go: разработка приложений в микросервисной архитектуре с нуля” можно купить в нашем интенет-магазине.

Введение………………………………………………………………………………………………….. 7

Для кого эта книга?……………………………………………………………………………………………………………………… 7

Обзор Golang………………………………………………………………………………………………………………………………… 7

Сравнение монолитной и микросервисной архитектуры………………………………………………………… 9

Список литературы и источников……………………………………………………………………………………………. 11

Глава 1. Разработка первого микросервиса (User)………………………………….. 13

Настройка локального окружения…………………………………………………………………………………………… 13

Редактор кода…………………………………………………………………………………………………………………….. 13

Go…………………………………………………………………………………………………………………………………………. 14

GVM…………………………………………………………………………………………………………………………………….. 17

Установка Protobuf…………………………………………………………………………………………………………….. 18

Git…………………………………………………………………………………………………………………………………………. 19

Codestyle……………………………………………………………………………………………………………………………… 21

Docker и Docker-Compose………………………………………………………………………………………………….. 22

Тестирование API………………………………………………………………………………………………………………. 24

Создание структуры проекта……………………………………………………………………………………………………. 27

Подключение необходимых библиотек…………………………………………………………………………………… 34

Переменные окружения……………………………………………………………………………………………………… 34

Логирование……………………………………………………………………………………………………………………….. 36

ORM…………………………………………………………………………………………………………………………………….. 40

Swagger………………………………………………………………………………………………………………………………… 43

Проектирование базы данных PostgreSQL………………………………………………………………………………. 47

Что такое база данных и какие они бывают?………………………………………………………………….. 47

Нормализация данных………………………………………………………………………………………………………. 48

Первая нормальная форма (1НФ)……………………………………………………………………………. 48

Вторая нормальная форма (2НФ)……………………………………………………………………………. 50

Третья нормальная форма (3НФ)…………………………………………………………………………….. 51

Разработка бизнес-логики и маршрутизации для модуля User……………………………………………… 52

Тестирование микросервиса…………………………………………………………………………………………………….. 79

Список литературы и источников……………………………………………………………………………………………. 86

Глава 2. Разработка микросервиса авторизации и аутентификации (Auth) 87

Теоретический обзор способов авторизации и аутентификации………………………………………….. 87

Аутентификация, идентификация и авторизация……………………………………………………………. 87

Аутентификация по паролю……………………………………………………………………………………………… 88

Аутентификация по сертификатам…………………………………………………………………………………… 89

Аутентификация по одноразовым паролям…………………………………………………………………….. 90

Аутентификация по ключам доступа……………………………………………………………………………….. 91

Аутентификация по токенам……………………………………………………………………………………………… 91

Базовые меры предосторожности от возможных уязвимостей……………………………………………… 93

Переполнение буфера………………………………………………………………………………………………………… 94

Состояние гонки…………………………………………………………………………………………………………………. 94

Атаки проверки ввода………………………………………………………………………………………………………… 94

Атаки аутентификации………………………………………………………………………………………………………. 95

Атаки авторизации…………………………………………………………………………………………………………….. 95

Атаки на стороне клиента…………………………………………………………………………………………………. 96

Разработка модуля Auth……………………………………………………………………………………………………………. 96

Список литературы и источников………………………………………………………………………………………….. 110

Глава 3. Способы взаимодействия между микросервисами………………….. 111

HTTP-протокол………………………………………………………………………………………………………………………… 111

Модель OSI……………………………………………………………………………………………………………………….. 111

Физический уровень……………………………………………………………………………………………….. 112

Канальный уровень………………………………………………………………………………………………… 112

Сетевой уровень……………………………………………………………………………………………………… 113

Транспортный уровень…………………………………………………………………………………………… 113

Сеансовый уровень…………………………………………………………………………………………………. 113

Уровень представления………………………………………………………………………………………….. 114

Прикладной уровень………………………………………………………………………………………………. 114

Устройство HTTP-протокола………………………………………………………………………………………….. 114

Структура HTTP-запроса………………………………………………………………………………………. 115

Cтруктура HTTP-ответа…………………………………………………………………………………………. 116

gRPC………………………………………………………………………………………………………………………………………….. 116

RabbitMQ………………………………………………………………………………………………………………………………….. 120

Apache Kafka……………………………………………………………………………………………………………………………. 123

Redis………………………………………………………………………………………………………………………………………….. 125

Разработка сервиса Gateway………………………………………………………………………………………………….. 126

Список литературы и источников………………………………………………………………………………………….. 156

Глава 4. Разработка модуля Transaction……………………………………………….. 157

Проектирование базы данных………………………………………………………………………………………………… 157

Частная форма третьей нормальной формы: нормальная форма Бойса — Кодда (НФБК)          157

Четвертая нормальная форма…………………………………………………………………………………………. 159

Пятая нормальная форма………………………………………………………………………………………………… 159

Доменно-ключевая нормальная форма………………………………………………………………………….. 160

Шестая нормальная форма……………………………………………………………………………………………… 160

Понятия миграций и транзакций в контексте базы данных PostgreSQL……………………………… 161

Миграции………………………………………………………………………………………………………………………….. 161

Индексы…………………………………………………………………………………………………………………………….. 163

Транзакции……………………………………………………………………………………………………………………….. 166

ACID…………………………………………………………………………………………………………………………. 166

Параллельные транзакции…………………………………………………………………………………….. 167

Уровни изоляции транзакций в SQL……………………………………………………………………… 168

Разработка модуля Transaction………………………………………………………………………………………………. 169

Интеграция Transaction и Account………………………………………………………………………………………….. 187

Проблема распределенных транзакций………………………………………………………………………………… 227

Двухфазная фиксация………………………………………………………………………………………………………. 228

Saga……………………………………………………………………………………………………………………………………. 229

Реализация паттерна Saga……………………………………………………………………………………… 231

Список литературы и источников………………………………………………………………………………………….. 265

Глава 5. Развертывание микросервисов……………………………………………….. 267

Обертывание микросервисов в docker-контейнеры………………………………………………………………. 294

Масштабирование при помощи оркестратора Kubernetes………………………………………………….. 306

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

Список литературы и источников………………………………………………………………………………………….. 311

Приложение. Описание файлового архива…………………………………………… 313

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

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

Новинка: “Python. Уроки для начинающих”

Python. Уроки для начинающих

В книге 22 урока, более 40 практических упражнений и заданий для самостоятельной работы. Описан язык Python: его основы, типы данных, управляющие выражения, функции, объекты, классы, исключения, модули и пакеты. Рассмотрены более развитые инструменты языка: установка и применение дополнительных библиотек, многопоточное, многопроцессное и конкурентное программирование, аннотации типов. Рассказано о практическом применении Python и различных библиотек для загрузки данных из Интернета, парсинга веб-страниц, работы с базами данных, программирования графических и веб-приложений, математических расчетов, вывода графиков и работы с искусственным интеллектом.  Электронный архив на сайте издательства  содержит все примеры из книги.

Для начинающих программистов

Ваш путь от новичка к Python-разработчику начинается здесь!

Перед вами — идеальный старт в мир программирования!

Книга Владимира Дронова, автора более 50 популярных компьютерных руководств, написана специально для тех, кто делает первые шаги в коде. Она превратит сложные концепции в понятные и наглядные уроки, не перегружая лишней теорией.

22 урока, 40+ практических упражнений — и вы с нуля освоите мощный язык Python, на котором создаются веб-сайты, приложения, аналитические инструменты и решения с искусственным интеллектом.

Чему вы научитесь:

  • Писать чистый и эффективный код на Python с самого начала.
  • Работать с базами данных, парсить информацию из интернета и строить графики.
  • Создавать графические приложения и основы веб-разработки.
  • Использовать многопоточность для решения сложных задач.
  • Интегрировать возможности искусственного интеллекта в свои проекты.

Почему именно эта книга?

  • Проверенный автор: Владимир Дронов — практикующий программист с 1987 года, умеющий объяснять просто о сложном.
  • Структура «от простого к сложному»: Пошаговые уроки и задания для закрепления материала.
  • Практика с первого дня: Все примеры из книги доступны в электронном архиве для скачивания.
  • Актуальность: Рассмотрены современные подходы, включая аннотации типов, конкурентное программирование и работу с AI.

Для кого эта книга:

  • Для абсолютных новичков в программировании.
  • Для студентов IT-направлений, ищущих понятное пособие.
  • Для специалистов из других областей, желающих автоматизировать задачи.
  • Для всех, кто хочет освоить востребованный язык и открыть двери в мир разработки.

 

Дронов Владимир Александрович

Дронов Владимир Александрович, профессиональный программист, писатель и журналист, работает с компьютерами с 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”.

Книгу “Python. Уроки для начинающих” можно купить в нашем интенет-магазине.

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

Почему именно Python?…………………………………………………………………………………………………………….. 13

Почему эта книга?……………………………………………………………………………………………………………………… 14

Использованные программные продукты……………………………………………………………………………….. 14

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

Часть I. Язык Python: основные инструменты………………….. 17

Урок 1. Введение в Python, часть 1…………………………………………………………. 19

1.1. Интерактивный режим Python……………………………………………………………………………………………. 19

1.2. Операторы. Приоритет операторов. Скобки……………………………………………………………………. 20

1.3. Функции……………………………………………………………………………………………………………………………….. 23

1.4. Переменные. Присваивание……………………………………………………………………………………………….. 24

1.5. Типы данных……………………………………………………………………………………………………………………….. 26

1.5.1. Числа — целые и вещественные………………………………………………………………………………. 26

1.5.2. Строки………………………………………………………………………………………………………………………… 27

1.5.3. Списки………………………………………………………………………………………………………………………… 28

1.5.4. Кортежи……………………………………………………………………………………………………………………… 29

1.5.5. Словари……………………………………………………………………………………………………………………… 29

1.6. Стандартная библиотека. Модули. Импорт…………………………………………………………………….. 30

1.7. Объекты и классы……………………………………………………………………………………………………………….. 32

1.7.1. Введение в объекты и классы…………………………………………………………………………………… 32

1.7.2. Объектная природа Python………………………………………………………………………………………. 33

1.8. Программные ошибки и сообщения о них………………………………………………………………………… 34

1.9. Что еще следует знать о Python в целом, часть 1…………………………………………………………….. 35

Урок 2. Введение в Python, часть 2…………………………………………………………. 38

2.1. Работа с данными разных типов……………………………………………………………………………………….. 38

2.1.1. Выяснение типа данных, к которому относится значение……………………………………. 38

2.1.2. Преобразование значения в другой тип данных……………………………………………………. 39

2.2. Написание программ на Python………………………………………………………………………………………… 39

2.2.1. Ввод данных……………………………………………………………………………………………………………… 40

2.2.2. Вывод данных…………………………………………………………………………………………………………… 40

2.2.3. Написание программ в среде IDLE Shell………………………………………………………………… 41

2.2.4. Альтернативные инструменты для написания программ……………………………………… 44

2.2.5. Комментарии…………………………………………………………………………………………………………….. 45

2.2.6. Правила набора программного кода на Python…………………………………………………….. 45

2.2.7. Сообщения об ошибках в коде программ……………………………………………………………….. 47

2.3. Что еще следует знать о Python в целом, часть 2…………………………………………………………….. 47

Урок 3. Логический тип данных, управляющие выражения и блоки…….. 49

3.1. Логический тип данных……………………………………………………………………………………………………… 49

3.1.1. Введение в логический тип. Операторы сравнения. Условия……………………………….. 49

3.1.2. Логические операторы……………………………………………………………………………………………… 50

3.2. Выражение ветвления…………………………………………………………………………………………………………. 51

3.3. Блоки. Пустой оператор…………………………………………………………………………………………………….. 53

3.3.1. Как набираются выражения, содержащие блоки?………………………………………………… 54

3.4. Выражение выбора…………………………………………………………………………………………………………….. 55

3.5. Циклы. Цикл с условием……………………………………………………………………………………………………… 56

3.6. Управление циклами…………………………………………………………………………………………………………… 58

3.6.1. Переход на следующую итерацию…………………………………………………………………………. 58

3.6.2. Прерывание цикла…………………………………………………………………………………………………….. 58

3.7. Автоматическое преобразование типов в условиях управляющих выражений…………… 59

3.8. Оператор присваивания в составе выражения…………………………………………………………………. 59

3.9. Что еще следует знать о блоках и не только…………………………………………………………………….. 60

3.10. Самостоятельные упражнения………………………………………………………………………………………… 61

Урок 4. Числа и строки………………………………………………………………………….. 62

4.1. Числа — целые и вещественные………………………………………………………………………………………… 62

4.1.1. Запись чисел……………………………………………………………………………………………………………… 62

4.1.2. Преобразование значений в числа………………………………………………………………………….. 63

4.1.3. Обработка чисел……………………………………………………………………………………………………….. 64

4.1.3.1. Арифметические операции…………………………………………………………………………. 64

4.1.3.2. Алгебраические и тригонометрические операции……………………………………. 65

4.1.3.3. Генерирование псевдослучайных чисел…………………………………………………… 66

4.1.4. Сравнение чисел……………………………………………………………………………………………………….. 67

4.1.5. Потери точности при вычислении…………………………………………………………………………… 68

4.2. Строки………………………………………………………………………………………………………………………………….. 68

4.2.1. Создание строк………………………………………………………………………………………………………….. 68

4.2.1.1. Специальные символы………………………………………………………………………………… 69

4.2.2. Преобразование значений в строки………………………………………………………………………… 70

4.2.3. Обработка строк……………………………………………………………………………………………………….. 70

4.2.3.1. Извлечение символов, срезов и перебор. Цикл перебора…………………………. 70

4.2.3.2. Простейшие операции над строками…………………………………………………………. 72

4.2.3.3. Преобразование строк………………………………………………………………………………… 72

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

4.2.4. Сравнение строк……………………………………………………………………………………………………….. 75

4.2.5. Форматируемые строки……………………………………………………………………………………………. 75

4.3. Последовательности…………………………………………………………………………………………………………… 78

4.4. Что еще нужно знать о строках и не только……………………………………………………………………… 79

4.5. Самостоятельные упражнения………………………………………………………………………………………….. 81

Урок 5. Списки, кортежи, генераторы и словари……………………………………. 82

5.1. Списки………………………………………………………………………………………………………………………………….. 82

5.1.1. Создание списков……………………………………………………………………………………………………… 82

5.1.2. Обработка списков……………………………………………………………………………………………………. 82

5.1.2.1. Простейшие операции над списками…………………………………………………………. 82

5.1.2.2. Добавление и удаление элементов списка………………………………………………… 84

5.1.2.3. Обработка элементов списка……………………………………………………………………… 85

5.1.2.4. Поиск элементов в списках…………………………………………………………………………. 86

5.1.2.5. Выдача элементов списков, выбранных псевдослучайным образом…….. 87

5.1.3. Сравнение списков……………………………………………………………………………………………………. 88

5.1.4. Списковые включения………………………………………………………………………………………………. 88

5.2. Кортежи……………………………………………………………………………………………………………………………….. 89

5.2.1. Создание кортежей…………………………………………………………………………………………………… 89

5.2.2. Работа с кортежами………………………………………………………………………………………………….. 89

5.2.3. Именованные кортежи……………………………………………………………………………………………… 90

5.3. Распаковка последовательностей……………………………………………………………………………………… 91

5.3.1. Пара слов о множественном присваивании и множественном выводе………………… 93

5.4. Генераторы………………………………………………………………………………………………………………………….. 93

5.4.1. Генераторы-функции………………………………………………………………………………………………… 93

5.4.2. Генераторы-выражения……………………………………………………………………………………………. 95

5.5. Словари……………………………………………………………………………………………………………………………….. 95

5.5.1. Создание словарей……………………………………………………………………………………………………. 95

5.5.2. Обработка словарей…………………………………………………………………………………………………. 96

5.5.2.1. Простейшие операции над словарями………………………………………………………. 96

5.5.2.2. Добавление, извлечение и удаление элементов словаря…………………………. 97

5.5.2.3. Перебор элементов словаря……………………………………………………………………….. 98

5.5.3. Сравнение словарей……………………………………………………………………………………………….. 100

5.5.4. Словарные включения……………………………………………………………………………………………. 100

5.5.5. Словари со значением по умолчанию defaultdict……………………………………………….. 101

5.6. Отображения……………………………………………………………………………………………………………………… 101

5.7. Особенности хранения значений в переменных. Ссылки……………………………………………… 102

5.8. Копирование списков, кортежей и словарей………………………………………………………………….. 103

5.9. Что еще нужно знать о генераторах и не только……………………………………………………………. 104

5.10. Самостоятельные упражнения………………………………………………………………………………………. 105

Урок 6. Функции………………………………………………………………………………….. 106

6.1. Вызов функций………………………………………………………………………………………………………………….. 106

6.1.1. Виды параметров функций…………………………………………………………………………………….. 106

6.1.2. Распаковка последовательностей и отображений в вызовах функций……………… 107

6.2. Объявление своих функций………………………………………………………………………………………………. 108

6.2.1. Объявление функции………………………………………………………………………………………………. 108

6.2.2. Доступ к глобальным переменным из тела функции…………………………………………… 109

6.2.3. Необязательные параметры………………………………………………………………………………….. 110

6.2.4. Произвольное количество параметров…………………………………………………………………. 111

6.2.5. Строго позиционные, строго именованные и двоякие параметры…………………….. 112

6.3. Функция как значение………………………………………………………………………………………………………. 114

6.3.1. Разные функции и методы, принимающие с параметрами другие функции……… 114

6.4. Лямбда-функции……………………………………………………………………………………………………………….. 116

6.5. Вложенные функции…………………………………………………………………………………………………………. 117

6.5.1. Замыкания. Фабрики функций……………………………………………………………………………….. 118

6.6. Декораторы функций………………………………………………………………………………………………………… 120

6.7. Сообщения об ошибках в телах функций. Стек вызовов………………………………………………. 122

6.8. Что еще нужно знать о функциях…………………………………………………………………………………….. 123

6.9. Самостоятельное упражнение…………………………………………………………………………………………. 124

Урок 7. Классы и объекты……………………………………………………………………. 125

7.1. Объекты……………………………………………………………………………………………………………………………… 125

7.1.1. Создание объектов………………………………………………………………………………………………….. 125

7.1.2. Обращение к атрибутам и вызов методов…………………………………………………………….. 125

7.1.3. Объектные и классовые атрибуты и методы………………………………………………………… 126

7.2. Классы……………………………………………………………………………………………………………………………….. 127

7.2.1. Объявление класса………………………………………………………………………………………………….. 127

7.2.2. Конструктор и деструктор…………………………………………………………………………………….. 128

7.2.3. Наследование классов……………………………………………………………………………………………. 130

7.2.3.1. Объявление производного класса……………………………………………………………. 130

7.2.3.2. Перекрытие и переопределение методов………………………………………………… 131

7.2.3.3. Множественное наследование…………………………………………………………………. 133

7.2.3.4. Указание декораторов функций у методов……………………………………………… 134

7.2.4. Классовые атрибуты и методы. Статические методы………………………………………… 134

7.2.5. Закрытые атрибуты и методы……………………………………………………………………………….. 135

7.2.6. Свойства………………………………………………………………………………………………………………….. 136

7.2.7. Добавленные атрибуты………………………………………………………………………………………….. 138

7.2.7.1. Ограничение набора создаваемых атрибутов……………………………………….. 138

7.2.8. Вложенные классы…………………………………………………………………………………………………. 139

7.2.9. Класс как значение…………………………………………………………………………………………………. 140

7.3. Декораторы классов…………………………………………………………………………………………………………. 140

7.4. Что еще нужно знать об объектах и классах………………………………………………………………….. 141

7.5. Самостоятельные упражнения………………………………………………………………………………………… 142

Урок 8. Модули и пакеты…………………………………………………………………….. 143

8.1. Модули. Импорт и подключение…………………………………………………………………………………….. 143

8.1.1. Использование сущностей из другого модуля……………………………………………………… 143

8.1.1.1. Импорт сущностей…………………………………………………………………………………….. 143

8.1.1.2. Подключение модулей………………………………………………………………………………. 144

8.1.2. Указание сущностей, доступных извне………………………………………………………………… 145

8.1.3. Создание своих модулей………………………………………………………………………………………… 145

8.2. Пакеты……………………………………………………………………………………………………………………………….. 146

8.2.1. Создание пакетов……………………………………………………………………………………………………. 146

8.2.2. Импорт и подключение из пакетов. Пути сущностей………………………………………….. 146

8.3. Что еще нужно знать о модулях, импорте и подключении……………………………………………. 148

8.4. Самостоятельное упражнение…………………………………………………………………………………………. 149

Урок 9. Исключения и их обработка. Обработчики контекстов…………… 150

9.1. Исключения……………………………………………………………………………………………………………………….. 150

9.1.1. Введение в исключения………………………………………………………………………………………….. 150

9.1.2. Обработка исключений………………………………………………………………………………………….. 151

9.1.3. Возбуждение исключений……………………………………………………………………………………… 153

9.1.4. Объявление своих исключений……………………………………………………………………………… 154

9.2. Обработчики контекстов………………………………………………………………………………………………….. 154

Часть II. Язык Python: расширенные инструменты……….. 157

Урок 10. Функции и классы особой функциональности………………………. 159

10.1. Создание генераторов-функций…………………………………………………………………………………….. 159

10.2. Dunder-методы и их использование………………………………………………………………………………. 160

10.2.1. Преобразование объектов в другие типы данных……………………………………………. 161

10.2.2. Поддержка арифметических операций с объектами.
Перегрузка операторов………………………………………………………………………………………. 162

10.2.3. Поддержка операций сравнения……………………………………………………………………….. 164

10.2.4. Создание своих итераторов……………………………………………………………………………….. 164

10.2.5. Создание своих последовательностей……………………………………………………………… 166

10.2.6. Создание своих отображений……………………………………………………………………………. 167

10.2.7. Прочие dunder-методы……………………………………………………………………………………….. 168

10.3. Написание менеджеров контекста………………………………………………………………………………… 170

10.3.1. Функции-менеджеры контекста…………………………………………………………………………. 170

10.3.2. Классы-менеджеры контекста…………………………………………………………………………… 171

10.4. Перечисления………………………………………………………………………………………………………………….. 172

10.5. Что еще нужно знать о классах особой функциональности……………………………………….. 175

10.6. Самостоятельные упражнения………………………………………………………………………………………. 176

Урок 11. Регулярные выражения………………………………………………………….. 177

11.1. Создание регулярных выражений…………………………………………………………………………………. 177

11.2. Написание регулярных выражений………………………………………………………………………………. 177

11.2.1. Метасимволы………………………………………………………………………………………………………. 178

11.2.2. Поднаборы…………………………………………………………………………………………………………… 178

11.2.3. Вариант……………………………………………………………………………………………………………….. 179

11.2.4. Квантификаторы…………………………………………………………………………………………………. 179

11.2.5. Утверждения………………………………………………………………………………………………………… 180

11.2.6. Группы…………………………………………………………………………………………………………………. 181

11.2.7. Обычные символы………………………………………………………………………………………………. 182

11.2.8. Флаги……………………………………………………………………………………………………………………. 182

11.2.9. Тестирование регулярных выражений……………………………………………………………… 183

11.3. Использование регулярных выражений……………………………………………………………………….. 184

11.3.1. Поиск первого совпадения…………………………………………………………………………………. 184

11.3.2. Поиск всех совпадений……………………………………………………………………………………….. 186

11.3.3. Прочие случаи использования…………………………………………………………………………… 186

11.4. Что еще нужно знать о регулярных выражениях и не только…………………………………….. 188

11.5. Самостоятельные упражнения………………………………………………………………………………………. 188

Урок 12. Установка и использование дополнительных библиотек……….. 189

12.1. Работа с дополнительными библиотеками. Утилита pip……………………………………………. 189

12.2. Библиотека Pillow: работа с графикой………………………………………………………………………….. 191

12.3. Программа для создания графических миниатюр, версия 1.0……………………………………. 192

12.4. Модуль argparse: обработка командных ключей……………………………………………………….. 194

12.4.1. Введение в командные ключи и их обработка…………………………………………………. 194

12.4.2. Создание объекта обработчика командных ключей………………………………………. 195

12.4.3. Описание командных ключей……………………………………………………………………………. 196

12.4.4. Обработка командных ключей………………………………………………………………………….. 198

12.5. Программа для создания графических миниатюр, версия 2.0……………………………………. 199

12.6. Что еще нужно знать о дополнительных библиотеках……………………………………………….. 201

12.7. Самостоятельные упражнения………………………………………………………………………………………. 202

Урок 13. Многопоточное и многопроцессное программирование…………. 203

13.1. Многопоточное программирование……………………………………………………………………………… 203

13.1.1. Введение в потоки. Глобальная блокировка интерпретатора……………………….. 203

13.1.2. Создание потоков……………………………………………………………………………………………….. 204

13.1.3. Блокировки………………………………………………………………………………………………………….. 206

13.1.4. Программа для создания графических миниатюр, версия 3.0………………………… 207

13.1.5. Очереди………………………………………………………………………………………………………………… 209

13.1.6. Программа для создания графических миниатюр, версия 3.1………………………… 211

13.2. Многопроцессное программирование………………………………………………………………………….. 213

13.2.1. Процессы и работа с ними…………………………………………………………………………………. 213

13.2.2. Программа для создания графических миниатюр, версия 4.0………………………… 214

13.3. Что еще нужно знать о потоках и процессах……………………………………………………………….. 215

13.4. Самостоятельные упражнения………………………………………………………………………………………. 216

Урок 14. Конкурентное программирование………………………………………….. 217

14.1. Сопрограммы………………………………………………………………………………………………………………….. 217

14.1.1. Введение в сопрограммы. Фьючеры………………………………………………………………….. 217

14.1.2. Сопрограммы-методы………………………………………………………………………………………… 220

14.1.2.1. Асинхронные итераторы. Цикл перебора с приостановкой……………. 220

14.1.2.2. Асинхронные менеджеры контекста.
Асинхронный обработчик контекста…………………………………………………. 221

14.1.3. Сопрограммы-генераторы…………………………………………………………………………………. 222

14.2. Задачи……………………………………………………………………………………………………………………………… 222

14.2.1. Создание и выполнение задач…………………………………………………………………………… 222

14.2.2. Одновременный запуск задач……………………………………………………………………………. 223

14.2.3. Группы задач………………………………………………………………………………………………………. 224

14.2.4. Прерывание задач………………………………………………………………………………………………. 225

14.3. Асинхронные очереди……………………………………………………………………………………………………. 226

14.4. Библиотека aiofiles: конкурентная работа с файлами………………………………………………… 226

14.5. Программа для создания графических миниатюр, версия 5.0……………………………………. 227

14.6. Самостоятельные упражнения………………………………………………………………………………………. 230

Урок 15. Аннотации типов и документирование кода. Датаклассы……… 231

15.1. Аннотации типов и их применение……………………………………………………………………………….. 231

15.1.1. Написание аннотаций типов……………………………………………………………………………… 231

15.1.1.1. Указание типов в аннотациях…………………………………………………………….. 232

15.1.1.2. Указание типов элементов у списков и кортежей…………………………….. 233

15.1.1.3. Указание типов элементов у последовательностей и отображений
произвольных типов……………………………………………………………………………. 234

15.1.1.4. Указание типов у функций, присваиваемых переменным……………….. 235

15.1.1.5. Указание типов у фьючеров……………………………………………………………….. 235

15.1.1.6. Указание типов значений, выдаваемых генераторами-функциями… 236

15.1.1.7. Обобщенные типы……………………………………………………………………………….. 237

15.1.2. Получение аннотаций, заданных у функций и методов………………………………….. 237

15.2. Строки документирования…………………………………………………………………………………………….. 238

15.3. Датаклассы……………………………………………………………………………………………………………………… 241

15.3.1. Простейшие датаклассы…………………………………………………………………………………….. 241

15.3.2. Более сложные датаклассы……………………………………………………………………………….. 243

15.4. Что еще нужно знать об аннотациях типов………………………………………………………………….. 245

15.5. Самостоятельное упражнение………………………………………………………………………………………. 245

Часть III. Практическое Python-программирование……… 247

Урок 16. Загрузка и анализ данных из Интернета………………………………… 249

16.1. Библиотека requests: загрузка файлов из Интернета…………………………………………………… 249

16.1.1. Requests: отправка клиентских запросов………………………………………………………….. 249

16.1.2. Requests: обработка полученных серверных ответов…………………………………….. 251

16.1.3. Requests: загрузка больших файлов………………………………………………………………….. 252

16.2. Библиотека Beautiful Soup: парсинг веб-страниц……………………………………………………….. 253

16.2.1. Подготовка к парсингу веб-страницы……………………………………………………………….. 253

16.2.2. Навигация по структуре узлов веб-страницы………………………………………………….. 254

16.2.3. Получение сведений об узле………………………………………………………………………………. 256

16.2.4. Поиск узлов………………………………………………………………………………………………………….. 257

16.2.5. Программа, выводящая заголовки статей на веб-сайте 3DNews.ru……………….. 262

16.2.6. Программа, сохраняющая изображения с заданной веб-страницы,
версия 1.0……………………………………………………………………………………………………………… 263

16.3. Библиотека aiohttp: конкурентная загрузка файлов……………………………………………………. 266

16.3.1. Aiohttp: отправка клиентских запросов……………………………………………………………. 267

16.3.2. Aiohttp: обработка серверных ответов……………………………………………………………… 267

16.3.3. Aiohttp: загрузка больших файлов…………………………………………………………………….. 268

16.3.4. Программа, сохраняющая изображения с заданной веб-страницы,
версия 2.0……………………………………………………………………………………………………………… 269

16.4. Самостоятельные упражнения………………………………………………………………………………………. 271

Урок 17. Разработка веб-приложений, часть 1……………………………………… 272

17.1. Основы библиотеки NiceGUI………………………………………………………………………………………….. 272

17.1.1. Страницы и маршруты……………………………………………………………………………………….. 272

17.1.2. Запуск и остановка веб-приложения…………………………………………………………………. 274

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

17.1.4. Параметризованные маршруты и URL-параметры…………………………………………. 276

17.1.5. Обработка событий…………………………………………………………………………………………….. 277

17.1.6. Функция run(), запускающая веб-приложение…………………………………………………. 279

17.2. Основные элементы страниц…………………………………………………………………………………………. 280

17.2.1. Надпись……………………………………………………………………………………………………………….. 280

17.2.2. Графический элемент…………………………………………………………………………………………. 280

17.2.3. Гиперссылка………………………………………………………………………………………………………… 280

17.2.4. Текст в формате Markdown………………………………………………………………………………… 281

17.2.5. Аудиоролик…………………………………………………………………………………………………………. 282

17.2.6. Видеоролик………………………………………………………………………………………………………….. 283

17.2.7. Фрагмент программного кода……………………………………………………………………………. 283

17.3. Разметочные элементы…………………………………………………………………………………………………… 284

17.3.1. Блок-строка…………………………………………………………………………………………………………. 284

17.3.2. Блок-колонка……………………………………………………………………………………………………….. 284

17.3.3. Разделитель…………………………………………………………………………………………………………. 285

17.3.4. Блок-сетка……………………………………………………………………………………………………………. 285

17.3.5. Спойлер……………………………………………………………………………………………………………….. 286

17.3.6. Быстрая разметка страниц…………………………………………………………………………………. 288

17.4. Если вы знаете HTML и CSS………………………………………………………………………………………….. 290

17.4.1. Создание произвольных HTML-элементов………………………………………………………. 290

17.4.2. Указание стилевых классов и встроенных CSS-стилей…………………………………… 291

17.4.3. Обработка событий DOM…………………………………………………………………………………… 292

17.5. Статические и выгруженные файлы……………………………………………………………………………… 292

17.6. Веб-приложение фотогалереи, версия 1.0…………………………………………………………………….. 293

17.7. Что еще нужно знать о NiceGUI, часть 1………………………………………………………………………. 296

17.8. Самостоятельные упражнения………………………………………………………………………………………. 297

Урок 18. Работа с базами данных…………………………………………………………. 298

18.1. Введение в реляционные базы данных…………………………………………………………………………. 298

18.2. Библиотека Tortoise ORM: удобная работа с базами данных……………………………………. 299

18.3. Модели…………………………………………………………………………………………………………………………….. 299

18.3.1. Объявление моделей…………………………………………………………………………………………… 300

18.3.2. Настройки, поддерживаемые всеми полями…………………………………………………….. 300

18.3.3. Типы полей………………………………………………………………………………………………………….. 301

18.3.4. Создание межтабличных связей………………………………………………………………………… 302

18.3.5. Настройки самой модели…………………………………………………………………………………… 303

18.4. Соединение с базой данных и инициализация схемы…………………………………………………. 304

18.5. Запись данных………………………………………………………………………………………………………………… 305

18.5.1. Создание записей………………………………………………………………………………………………… 305

18.5.2. Правка записей……………………………………………………………………………………………………. 306

18.5.3. Удаление записей……………………………………………………………………………………………….. 307

18.6. Выборка данных…………………………………………………………………………………………………………….. 307

18.6.1. Поиск записи……………………………………………………………………………………………………….. 307

18.6.2. Извлечение значений из полей записи………………………………………………………………. 308

18.6.3. Фильтрация записей. Наборы записей……………………………………………………………… 308

18.6.3.1. Модификаторы…………………………………………………………………………………….. 309

18.6.4. Сортировка записей……………………………………………………………………………………………. 311

18.6.5. Извлечение первой и последней записей………………………………………………………….. 311

18.6.6. Извлечение заданного количества записей………………………………………………………. 312

18.6.7. Извлечение всех записей…………………………………………………………………………………….. 312

18.6.8. Проверка существования записей……………………………………………………………………… 312

18.6.9. Извлечение связанных записей………………………………………………………………………….. 313

18.6.10. Извлечение записей в виде списка словарей………………………………………………….. 314

18.7. Закрытие соединения с базой данных………………………………………………………………………….. 314

18.8. Интеграция Tortoise ORM и NiceGUI…………………………………………………………………………….. 315

18.9. Веб-приложение фотогалереи, версия 2.0…………………………………………………………………….. 315

18.9.1. Модели пользователя и изображения……………………………………………………………….. 315

18.9.2. База данных веб-приложения……………………………………………………………………………. 317

18.9.3. Вывод изображений из базы данных………………………………………………………………… 317

18.10. Что еще нужно знать о библиотеке Tortoise ORM……………………………………………………… 319

18.11. Самостоятельные упражнения……………………………………………………………………………………. 320

Урок 19. Разработка веб-приложений, часть 2……………………………………… 321

19.1. Элементы управления…………………………………………………………………………………………………….. 321

19.1.1. Кнопка………………………………………………………………………………………………………………….. 321

19.1.2. Поле ввода…………………………………………………………………………………………………………… 321

19.1.3. Область редактирования……………………………………………………………………………………. 322

19.1.4. Флажок…………………………………………………………………………………………………………………. 322

19.1.5. Набор переключателей………………………………………………………………………………………. 323

19.1.6. Раскрывающийся список……………………………………………………………………………………. 323

19.1.7. Поле для ввода числа…………………………………………………………………………………………. 325

19.1.8. Регулятор……………………………………………………………………………………………………………… 326

19.1.9. Поле для выбора файлов……………………………………………………………………………………. 326

19.2. Хранилища данных NiceGUI…………………………………………………………………………………………. 328

19.3. Хеширование паролей……………………………………………………………………………………………………. 329

19.4. Веб-приложение фотогалереи, версия 3.0…………………………………………………………………….. 330

19.4.1. Верхнее меню и секретный ключ………………………………………………………………………. 330

19.4.2. Страницы входа и выхода…………………………………………………………………………………. 331

19.4.3. Страница пользовательского профиля……………………………………………………………… 333

19.4.4. Страницы добавления и удаления изображений…………………………………………….. 335

19.5. Что еще нужно знать о библиотеке NiceGUI, часть 2………………………………………………….. 338

19.6. Самостоятельное упражнение………………………………………………………………………………………. 338

Урок 20. Разработка графических приложений……………………………………. 339

20.1. Библиотека Toga: разработка графических приложений…………………………………………… 339

20.2. Основы библиотеки Toga……………………………………………………………………………………………….. 339

20.2.1. Окна и контейнеры……………………………………………………………………………………………… 339

20.2.2. Обработка событий…………………………………………………………………………………………….. 341

20.2.3. Оформление приложения. Стили……………………………………………………………………….. 342

20.2.4. Запуск и останов приложения……………………………………………………………………………. 343

20.3. Простейшие элементы окон…………………………………………………………………………………………… 344

20.3.1. Свойства и методы, поддерживаемые всеми элементами окон………………………. 344

20.3.2. Надпись……………………………………………………………………………………………………………….. 345

20.3.3. Поле ввода…………………………………………………………………………………………………………… 345

20.3.4. Область редактирования……………………………………………………………………………………. 345

20.3.5. Флажок…………………………………………………………………………………………………………………. 346

20.3.6. Кнопка………………………………………………………………………………………………………………….. 346

20.3.7. Графический элемент…………………………………………………………………………………………. 347

20.3.8. Поле для ввода целого числа…………………………………………………………………………….. 347

20.3.9. Поле для ввода пароля……………………………………………………………………………………….. 348

20.3.10. Регулятор…………………………………………………………………………………………………………… 348

20.4. Модели и списки……………………………………………………………………………………………………………… 349

20.4.1. Модели…………………………………………………………………………………………………………………. 349

20.4.2. Списковые элементы управления……………………………………………………………………… 351

20.4.2.1. Раскрывающийся список…………………………………………………………………….. 351

20.4.2.2. Таблица………………………………………………………………………………………………… 352

20.5. Контейнеры……………………………………………………………………………………………………………………… 353

20.5.1. Стопка………………………………………………………………………………………………………………….. 353

20.5.2. Блокнот с вкладками…………………………………………………………………………………………… 354

20.5.3. Панель с прокруткой…………………………………………………………………………………………… 355

20.6. Задание стилей у элементов окон…………………………………………………………………………………. 356

20.7. Управление окнами………………………………………………………………………………………………………… 358

20.7.1. Задание главного окна приложения………………………………………………………………….. 358

20.7.2. Создание вторичных окон………………………………………………………………………………….. 360

20.7.3. Вывод стандартных модальных окон………………………………………………………………. 363

20.8. Интеграция библиотек Toga и Tortoise ORM………………………………………………………………… 364

20.9. Что еще нужно знать о библиотеке Toga………………………………………………………………………. 364

20.10. Самостоятельные упражнения……………………………………………………………………………………. 365

Урок 21. Математика……………………………………………………………………………. 366

21.1. Библиотека Matplotlib: вывод графиков……………………………………………………………………….. 366

21.1.1. Основные принципы Matplotlib………………………………………………………………………….. 366

21.1.1.1. Вывод простого графика…………………………………………………………………….. 366

21.1.1.2. Вывод двух графиков на одних координатных осях……………………….. 368

21.1.1.3. Вывод двух графиков на разных координатных осях……………………… 369

21.1.1.4. Настройка графиков……………………………………………………………………………. 370

21.1.2. Создание координатных осей……………………………………………………………………………. 372

21.1.3. Рисование графиков разных типов……………………………………………………………………. 373

21.1.4. Вывод и оформление графиков………………………………………………………………………….. 377

21.2. Библиотека NumPy: обработка многомерных массивов…………………………………………….. 378

21.3. Что еще нужно знать о библиотеках Matplotlib и NumPy…………………………………………… 382

Урок 22. Искусственный интеллект……………………………………………………… 383

22.1. Регистрация в личном кабинете GigaChat API и получение ключа авторизации…….. 383

22.2. Библиотеки LangChain, langchain-community и langchain-gigachat……………………………. 384

22.3. Разработка ИИ-клиентов………………………………………………………………………………………………… 384

22.3.1. Соединение с большой языковой моделью………………………………………………………. 384

22.3.2. ИИ-клиент: отправка запросов и получение ответов………………………………………. 385

22.3.3. ИИ-клиент: хранение истории взаимодействия с языковой моделью…………….. 387

22.3.4. ИИ-клиент: очистка истории……………………………………………………………………………… 388

22.3.5. Получение ответа по частям……………………………………………………………………………… 390

22.3.6. Конкурентная работа с языковыми моделями…………………………………………………. 391

22.4. Разработка ИИ-агентов………………………………………………………………………………………………….. 392

22.4.1. Объявление инструментов………………………………………………………………………………….. 392

22.4.1.1. Инструмент для поиска в Интернете средствами DuckDuckGo………. 393

22.4.2. Создание ИИ-агента……………………………………………………………………………………………. 393

22.4.3. ИИ-агент: отправка запросов и получение ответов…………………………………………. 394

22.4.4. Обработка ответов……………………………………………………………………………………………… 396

22.4.5. ИИ-агент: хранение истории взаимодействия с языковой моделью………………. 397

22.4.6. Работа с состоянием ИИ-агента………………………………………………………………………… 399

22.4.7. ИИ-агент: очистка истории………………………………………………………………………………… 400

22.5. Что еще нужно знать о работе с искусственным интеллектом…………………………………… 401

22.6. Самостоятельное упражнение………………………………………………………………………………………. 402

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

Приложения…………………………………………………………………………………… 405

Приложение 1. Установка исполняющей среды Python………………………… 407

Приложение 2. Приоритет операторов Python………………………………………. 411

Приложение 3. Использование ИИ для изучения Python
и написания программного кода………………………………………………………….. 412

Приложение 4. Описание файлового архива………………………………………… 416

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

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

Встречайте: “Python для инженерных задач”

Python для инженерных задач

Книга предназначена для изучения языка Python с ориентацией на использование его в инженерных и научных вычислениях, начиная с установки интерпретатора и изучения основ языка и до применения специализированных библиотек. Основные темы касаются встроенных типов языка, функций и аннотации типов, особенностей динамической типизации, форматирования и обработки текста, в том числе с использованием регулярных выражений, работа с файлами. Подробно рассматриваются основные идеи объектно-ориентированного программирования и его особенности в Python. Также затрагиваются темы обработки исключений, тестирования приложений, описываются некоторые модули из стандартной библиотеки, а также множество сторонних библиотек, в частности, NumPy для математических вычислений, Pandas для обработки табличных данных, Matplotlib для построения различных видов графиков, библиотеки для работы с различными форматами файлов. Рассматриваются такие инструменты, как IPython и JupyterLab, применяемые в научных и инженерных областях.

Для студентов инженерных специальностей, а также для начинающих изучать язык

Изучение языка Python с ориентацией на использование его в инженерных и научных вычислениях.

В настоящее время Python является одним из наиболее популярных языков программирования. Благодаря легкости его изучения и удобству использования Python нашел применение в различных областях: начиная с создания веб-сервисов, приложений для ПК, маленьких скриптов, выполняющих однотипные задачи, до работы с нейронными сетями,   статистики в машинном обучении,  обработки данных. Также Python широко применяется для решения научных и инженерных задач благодаря многочисленным сторонним библиотекам. Python — лаконичный язык, он позволяет быстро писать код, реализующий требуемый алгоритм, отлаживать его и гарантировать работоспособность..  Python закрепился в научной среде и в образовании и является де-факто стандартным инструментом для решения математических задач, обработки табличных данных, построения графиков многих видов,.

Эта книга предназначена для обучения языку Python именно в таком направлении. Книга начинается с самых основ языка Python, его синтаксиса и базовых типов, затем описываются основные идеи объектно-ориентированного программирования и их реализация на Python. Наконец, рассказывается о стандартной библиотеке Python и множестве сторонних библиотек и инструментов, облегчающих работу в инженерной и научных областях.

 

  • Установка интерпретатора Python
  • Основы языка Python: описание синтаксиса и встроенных типов
  • Функции и аннотации типов
  • Объектно-ориентированное программирование
  • Обработка исключений
  • Работа с текстом и регулярные выражения
  • Установка сторонних библиотек и использование виртуальных окружений
  • Работа с файлами и файловой системой
  • Тестирование приложений
  • Библиотека NumPy для математических расчетов
  • Форматы хранения данных, используемые в научной среде
  • Построение двумерных и трехмерных графиков с помощью библиотеки Matplotlib
  • Работа с табличными данными с помощью библиотеки Pandas
  • Среды выполнения скриптов IPython и JupyterLab

Красивое лучше, чем уродливое. Явное лучше, чем неявное. Простое лучше, чем сложное. Из кодекса «Дзен Python»

 

Ильин Евгений

Евгений Ильин — кандидат технических наук, доцент кафедры «Радиофизика, антенны и микроволновая техника», входящей в состав института «Радиоэлектроника, инфокоммуникации и информационная безопасность» Московского авиационного института (национального исследовательского университета). Ведет курсы «Языки программирования в задачах радиофизики» и «Моделирование электродинамических задач численными методами». Сфера интересов и компетенций — языки программирования (Python, Rust и Java), электродинамика, антенны и устройства СВЧ, а также алгоритмы для их моделирования.

Книгу “Python для инженерных задач” можно купить в нашем интенет-магазине.

Предисловие. 13

Для кого эта книга?. 13

Структура книги. 13

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

Введение. 17

Общие сведения о Python. 17

Области применения Python. 18

Зачем Python инженеру?. 20

Типы языков программирования. 22

Компилируемые языки программирования. 22

Интерпретируемые языки программирования. 24

Языки программирования, компилируемые в байт-код. 25

Исходные коды к книге. 27

ЧАСТЬ I. Базовые понятия и встроенные типы.. 29

– ГЛАВА 1 –

Первое знакомство с Python. 31

Установка интерпретатора Python под Windows. 31

Hello, world! Работаем в интерактивном режиме. 37

Создание переменных. 39

Заключение. 43

– ГЛАВА 2 –

Простейшие типы и математика в Python. 45

Коротко о терминологии. 45

Целые числа. 46

Числа с плавающей точкой. 47

Комплексные числа. 49

Логический (булев) тип переменных. 52

Объект None. 53

Математические операторы.. 54

Приоритет операторов. 57

Инструкции присваивания. 58

Математические функции и модуль math. 59

Модуль cmath. 65

Заключение. 66

– ГЛАВА 3 –

Пишем скрипты на Python. 68

Создание скриптов. 68

Выполнение скриптов. 70

Комментарии и указание кодировки файла скрипта. 72

Инструкция ветвления if … elif … else. 74

Переносы строк. 79

Выражение if … else. 80

Цикл while. 81

Оператор :=. 84

Инструкция assert 86

Python Enhancement Proposals (PEP) 87

Заключение. 88

– ГЛАВА 4 –

Списки, кортежи и массивы.. 90

Способы хранения данных. 90

Массивы.. 90

Списки. 92

Кортежи. 93

Создание списков. 94

Создание кортежей. 95

Создание массивов. 96

Преобразование списков, кортежей и массивов друг в друга. 98

Доступ к элементам по индексу. 99

Срезы.. 101

Выполнение присваивания для сложных объектов. Операторы is и is not 104

Операторы in и not in. 109

Распаковка элементов коллекций. 109

Основные методы классов list, tuple и array. 111

Заключение. 118

– ГЛАВА 5 –

Перебор элементов коллекций. 119

Инструкция for … in. 119

Создание списков с помощью инструкции for … in. 123

Создание последовательности целых чисел. Класс range. 125

Перебор элементов с нумерацией. Класс enumerate. 127

Параллельный перебор элементов из нескольких коллекций. Класс zip. 128

Заключение. 132

– ГЛАВА 6 –

Словари. 133

Что такое «словари» и зачем они нужны?. 133

Создание словарей. 134

Основные операции со словарями. 136

Ограничения на типы ключей. 140

Обход элементов словаря с помощью цикла for. 141

Заключение. 143

– ГЛАВА 7 –

Множества. 144

Что такое множества и зачем они нужны?. 144

Создание множеств. 144

Создание неизменяемых множеств. 146

Основные операции над множествами. 146

Методы и операторы классов set и frozenset 147

Заключение. 152

– ГЛАВА 8 –

Строки. 153

Создание строк. 154

Многострочные литералы.. 154

Вставка символов Unicode. 158

«Сырые» строки. 159

Создание строкового представления чисел и других объектов. 160

Базовые операции над строками. 160

Некоторые методы класса str. 162

Заключение. 169

– ГЛАВА 9 –

Форматирование строк. 170

Использование оператора %.. 171

Использование метода format() 177

f-строки. 181

Заключение. 187

Часть II. Основные подходы.. 189

– ГЛАВА 10 –

Функции. 191

Создание функций. 191

«Утиная» типизация. 195

Именованные параметры функций. 197

Параметры со значениями по умолчанию.. 198

Функции с переменным числом позиционных параметров. 201

Функции с переменным числом именованных параметров. 202

Разделители параметров / и *. 205

Функции и глобальные переменные. 208

Заключение. 211

– ГЛАВА 11 –

Функции как объекты.. 212

Функция — это тоже объект. 212

Анонимные функции. 214

Строки документации. 218

Декораторы.. 221

Заключение. 228

– ГЛАВА 12 –

Модули и пакеты модулей. 229

Создание и импорт модулей. 229

Выполнение кода модулей при импорте. Переменные __name__ и __file__. 232

Пакеты модулей. 236

Заключение. 240

– ГЛАВА 13 –

Объектно-ориентированное программирование. Создание классов. 241

Что такое объектно-ориентированное программирование?. 241

Создание классов. 244

Видимость полей и методов классов. 248

Свойства. 251

Поля класса. 252

Методы класса. 255

Статические методы.. 257

Заключение. 259

– ГЛАВА 14 –

Объектно-ориентированное программирование.
Наследование и полиморфизм.. 260

Что такое наследование классов?. 260

Наследование классов. 260

Абстрактные базовые классы.. 267

Что такое полиморфизм?. 273

Множественное наследование. 273

Функции для определения родительских отношений классов. Класс object 280

Заключение. 282

– ГЛАВА 15 –

«Магические» методы классов и перегрузка операторов. 284

«Магические» методы классов. 284

Примеры перегрузки операторов. 286

Заключение. 296

– ГЛАВА 16 –

Сторонние библиотеки и инструменты для работы с ними. 298

Установка пакетов с помощью pip. 298

Файл зависимостей requirements.txt 304

Обновление и удаление пакетов. 305

Заключение. 307

– ГЛАВА 17 –

Виртуальные окружения. 308

Программа venv. 308

Работа с виртуальными окружениями. 311

Программа Poetry. 311

Создание проекта с помощью Poetry. Файл pyproject.toml 312

Создание виртуального окружения для проекта с помощью Poetry. 315

Менеджер пакетов и проектов uv. 319

Создание проекта с помощью uv. 320

Создание виртуального окружения для проекта с помощью uv. 322

Заключение. 326

– ГЛАВА 18 –

Аннотации типов. 328

Проблемы динамической типизации. 328

Что такое «аннотации типов» и зачем они нужны?. 329

Знакомство с Mypy. 331

Указание простейших типов и коллекций. 332

Обобщенные типы.. 338

Заключение. 342

– ГЛАВА 19 –

Обработка исключений. 344

Обработка ошибок без использования исключений. 344

Что такое исключения, как и зачем их ловить?. 345

Перехват исключений. 349

Пользовательские исключения. Наследование исключений. 352

Конструкция try except else finally. 358

Заключение. 363

– ГЛАВА 20 –

Запись и чтение файлов. 364

Открытие файла и запись текстовых данных. 364

Закрытие файлов. Инструкция with. 369

Чтение текстовых данных. 371

Двоичные строки. 373

Запись и чтение двоичных данных. 378

Коротко о сериализации и десериализации. 383

Заключение. 386

– ГЛАВА 21 –

Работа с файловой системой. 387

Проблема формирования путей до файлов. 387

Формирование путей до файлов. Модуль os.path. 388

Формирование путей до файлов. Модуль pathlib. 395

Создание, копирование, перемещение и удаление файлов и каталогов. 399

Создание пустых файлов. 399

Создание каталогов. 399

Копирование файлов. 401

Копирование каталогов. 403

Удаление файлов и каталогов. 404

Переименование и перемещение файлов и каталогов. 405

Заключение. 408

– ГЛАВА 22 –

Передача параметров через командную строку. 410

Зачем это надо?. 410

Разбор параметров командной строки без использования библиотек. 412

Разбор командной строки с помощью модуля argparse. 415

Заключение. 425

– ГЛАВА 23 –

Регулярные выражения. 427

Что такое «регулярные выражения» и когда их используют?. 427

Символы подстановки. 428

Параметры регулярных выражений. 433

Инструкции группировки. 434

Поиск и замена с помощью регулярных выражений. 440

Коротко про функции из модуля re. 444

Заключение. 444

– ГЛАВА 24 –

Тестирование приложений. 446

Зачем нужны тесты, и какие они бывают?. 446

Создание тестов с помощью модуля unittest 447

Добавим еще тесты.. 453

Подготовка данных для тестов. 456

Способы запуска тестов. 458

Тесты в строках документации. 460

Заключение. 464

ЧАСТЬ III. Python для научных вычислений. 467

– ГЛАВА 25 –

Массивы из библиотеки NumPy. 469

Массивы NumPy. 469

Способы создания массивов. 472

Основные операции над массивами. 477

Индексация, срезы и виды.. 480

Формы массивов. 484

Транслирование (broadcasting) 490

Булевы массивы и фильтрация элементов по условию.. 492

Использование целочисленных массивов в качестве индексов. 495

Заключение. 496

– ГЛАВА 26 –

Форматы файлов для хранения числовых данных. 498

Текстовые файлы, хранящие данные в столбцах. 498

Работа с данными в формате CSV.. 504

Файлы форматов NPY и NPZ. 506

Файлы формата HDF5. 508

Создание файлов в формате HDF5. 509

Сторонние приложения для работы с файлами формата HDF5. 511

Чтение файлов в формате HDF5. 513

Другие форматы данных. 514

Заключение. 515

– ГЛАВА 27 –

Основы построения графиков с помощью библиотеки Matplotlib. 517

Установка библиотеки и первые примеры графиков. 517

Настройка внешнего вида кривых на графиках. 521

Способы задания цвета. 522

Стили линий. 524

Маркеры.. 525

Краткий способ задания внешнего вида кривых. 528

Несколько графиков в одних осях. 528

Добавление легенды.. 530

Создание нескольких графиков в одном окне на разных осях. 532

Настройка осей графика. 535

Объектно-ориентированный подход к построению графиков. 540

Заключение. 545

– ГЛАВА 28 –

Построение с помощью библиотеки Matplotlib более сложных графиков. 547

Диаграммы рассеяния. 547

Графики в полярной системе координат. 550

Столбчатые диаграммы.. 553

Круговые диаграммы.. 558

Построение трехмерных графиков. 562

Линии уровня. 571

Отображение векторов. 575

Заключение. 579

– ГЛАВА 29 –

Знакомство с Pandas. 581

Установка библиотеки Pandas. 581

Чтение файлов в формате CSV.. 582

Создание экземпляров класса DataFrame. 589

Выбор элементов и фильтрация данных из DataFrame. 591

Обработка данных с помощью DataFrame. 598

Группировка. 607

Заключение. 611

– ГЛАВА 30 –

Библиотека SciPy: решение сложных научных и инженерных задач. 613

Физические константы и специальные математические функции. 613

Преобразование Фурье. 619

Заключение. 640

– ГЛАВА 31 –

Интерактивные среды IPython и JupyterLab. 642

IPython — более удобный REPL. 642

От IPython к JupyterLab. 648

Заключение. 659

Заключение ко всей книге. 661

Литература. 662

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

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

Встречайте: “Программирование с помощью искусственного интеллекта”

Программирование с помощью искусственного интеллекта

Книга посвящена практике использования инструментов искусственного интеллекта  для всех этапов создания кода: от разработки требований и планирования до проектирования, написания, отладки и тестирования. Предложена методология модульного программирования, которая эффективно сочетается с подходом генерации кода с применением ИИ. Рассмотрены  основные возможности и сценарии использования инструментов ИИ для разработки, оценены плюсы и минусы популярных систем. Показаны перспективы применения универсальных языковых моделей (LLM), таких как ChatGPT, Gemini, Claude и других, для решения задач программирования. Также рассмотрено применение широкого спектра специализированных систем (GitHub Copilot, Tabnine, Cursor, Amazon CodeWhisperer). Освещены вопросы инженерии промптов, автоматизации рутинных задач, таких как создание регулярных выражений, применения низкокодового и бескодового программирования и др.

Для широкого круга разработчиков

 

Примеры кода можно скачать тут: https://github.com/ttaulli/AI-Assisted-Programming-Book

Получите практические советы, как использовать инструменты искусственного интеллекта для всех этапов создания кода: от разработки требований и планирования до проектирования, написания, отладки и тестирования.  Начинающие и опытные разработчики узнают, как применять широкий спектр инструментов ИИ— от универсальных языковых моделей (ChatGPT, Gemini, Claude) до специализированных систем (GitHub Copilot, Tabnine, Cursor, Amazon CodeWhisperer).

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

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

В этой книге:

  • Основные возможности ИИ-инструментов для разработки
  • Плюсы, минусы и сценарии использования популярных систем, включая GitHub Copilot
  • Применение универсальных языковых моделей (LLM), таких как ChatGPT, Gemini, Claude и других, для решения задач программирования
  • Использование ИИ-инструментов в жизненном цикле разработки ПО: от разработки требований до тестирования
  • Инженерия промптов для разработки
  • Автоматизация рутинных задач, таких как создание регулярных выражений, с помощью ИИ
  • Низкокодовые и бескодовые инструменты на основе ИИ
Tom Taulli

Том Таулли занимается разработкой программного обеспечения с 1980-х годов. Еще в колледже основал свою первую компанию, которая сосредоточилась на разработке систем электронного обучения. Ведет авторские колонки для популярных онлайн-изданий, таких как BusinessWeek.com, TechWeb.com и Bloomberg.com. Автор статей об искусственном интеллекте для Forbes.com и является консультантом различных компаний в этой сфере. Ведет  веб-сайт Taulli.com.

Книгу “Программирование с помощью искусственного интеллекта” можно купить в нашем интенет-магазине.

Высокая оценка книги
«Программирование с помощью искусственного интеллекта». 9

Вступительное слово. 11

Предисловие. 13

О чем эта книга. 14

В чем отличие этой книги. 15

Для кого эта книга. 16

Условные обозначения, используемые в книге. 16

Примеры использования кода. 16

Онлайн-обучение O’Reilly. 17

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

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

Глава 1. Новый мир для разработчиков. 19

Эволюция и революция. 20

Генеративный искусственный интеллект. 23

Преимущества. 24

Минимизация поиска. 24

Ваш консультант. 26

Интеграция с IDE.. 27

Рефлексия вашей кодовой базы.. 28

Целостность кода. 29

Генератор документации на платформе искусственного интеллекта. 30

Модернизация. 30

Недостатки. 34

Галлюцинации. 34

Интеллектуальная собственность. 35

Конфиденциальность. 36

Безопасность. 36

Данные для обучения. 37

Предвзятость. 38

Новый путь для разработчиков. 38

Карьера. 39

Разработчик 10x?. 40

Профессиональные навыки разработчика. 40

Заключение. 41

Глава 2. Как работает технология программирования с использованием искусственного интеллекта  43

Основные функции. 43

Подбор кода и завершение с учетом контекста в сопоставлении с интеллектуальным завершением кода  44

Компиляторы по сравнению с инструментами программирования на основе искусственного интеллекта  45

Уровни возможностей. 47

Генеративный искусственный интеллект и большие языковые модели (LLM) 49

Эволюция. 49

Модель трансформера. 51

OpenAI Playground. 54

Токены.. 55

Использование платформы.. 56

Оценка больших языковых моделей. 60

Типы больших языковых моделей. 63

Выбор ИИ-инструментов программирования. 66

Заключение. 67

Глава 3. Оперативное проектирование. 69

Наука и искусство. 70

Проблемы.. 70

Промпт. 71

Контекст. 72

Инструкции. 72

Суммаризация. 73

Классификация текста. 74

Рекомендации. 75

Локализация. 75

Ввод содержимого. 77

Формат. 77

Передовой опыт. 79

Будьте конкретны.. 79

Сокращения и технические термины.. 80

Техники обучения с примерами и без. 80

Ключевые слова. 81

Методика промптов по цепочке размышлений (CoT) 82

Наводящие вопросы.. 83

Промпт на примеры и аналогии. 83

Снижение галлюцинаций. 84

Безопасность и конфиденциальность. 85

Автономные агенты искусственного интеллекта. 86

Заключение. 89

Глава 4. Github Copilot 91

GitHub Copilot 91

Цены и версии. 92

Пример использования: программирование аппаратных средств. 93

Пример использования: Shopify. 94

Пример использования: Accenture. 96

Безопасность. 96

Приступая к работе. 97

Среда Codespaces и Visual Studio Code. 98

Рекомендации. 99

Комментарии. 102

Чат. 102

Внутренний чат. 107

Открытые вкладки. 108

Интерфейс командной строки. 109

Партнерская программа Copilot 110

Заключение. 111

Глава 5. Остальные инструменты программирования на основе
искусственного интеллекта. 113

CodeWhisperer от Amazon. 113

Duet AI от Google для разработчиков. 115

Tabnine. 117

Replit 118

CodeGPT.. 121

Cody  122

CodeWP. 124

Warp  125

Bito AI. 127

Cursor 128

Code Llama. 130

Остальные модели с открытым исходным кодом.. 131

StableCode. 131

AlphaCode. 132

PolyCoder 132

CodeT5. 132

Компании, производящие корпоративное программное обеспечение. 133

Заключение. 134

Глава 6. ChatGPT и другие большие языковые модели общего назначения. 135

ChatGPT.. 135

GPT-4. 136

Навигация по ChatGPT.. 137

Мобильное приложение. 140

Пользовательские запросы.. 141

Просмотр с помощью Bing. 141

Утомительные задачи. 145

Регулярные выражения. 146

Стартовый код. 147

GitHub README.. 148

Кросс-браузерная совместимость. 149

Команды Bash. 150

GitHub Actions. 150

Плагины.. 151

Плагин Codecademy. 152

Плагин AskYourDatabase. 153

Плагин Recombinant AI. 154

GPTs  154

Gemini 156

Приложения. 158

Программирование в Gemini 159

Claude. 161

Заключение. 163

Глава 7. Идеи, планирование и требования. 165

Мозговой штурм.. 165

Исследование рынка. 167

Тенденции развития рынка. 170

Общий адресный рынок. 171

Конкуренция. 172

Требования. 174

Документ с требованиями к продукту. 175

Спецификация требований к программному обеспечению.. 176

Интервью.. 177

Белая доска. 178

Стиль. 180

Подходы к планированию проекта. 181

Разработка через тестирование. 183

Разработка веб-дизайна. 185

Заключение. 188

Глава 8. Программирование. 189

Что в реальности?. 189

Мотивы, помогающие принять решение. 191

Обучение. 191

Комментарии. 193

Модульное программирование. 194

Начало работы над проектом.. 195

Автозаполнение. 196

Рефакторинг. 198

Ninja Code. 198

Метод извлечения. 199

Разделение условий. 200

Переименование. 200

Мертвый код. 201

Функции. 202

Объектно-ориентированное программирование. 204

Фреймворки и библиотеки. 205

Данные. 206

Разработка фронтенда. 208

Каскадные таблицы стилей CSS. 209

Создание графики. 210

Инструменты на основе искусственного интеллекта. 211

API-интерфейсы.. 213

Заключение. 214

Глава 9. Отладка, тестирование и развертывание. 215

Отладка. 215

Документация. 216

Код-ревью.. 218

Модульные тесты.. 219

Запросы на извлечение. 222

Развертывание. 224

Обратная связь с пользователями. 225

Запуск. 227

Заключение. 228

Глава 10. Выводы.. 229

Интенсивный процесс обучения. 229

Основные преимущества. 229

Но есть и недостатки. 230

Оперативное проектирование —  это не только искусство, но и наука. 231

За гранью программирования. 232

Искусственный интеллект не заменит вас на работе. 232

Заключение. 233

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

Об авторе. 238

Об изображении на обложке. 239

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

Новинка: “Современный C#. Разработка настольных, облачных, мобильных и веб-приложений”

Современный C#. Разработка настольных, облачных, мобильных и веб-приложений

Это новое издание фундаментальной книги Иэна Гриффитса по языку C# и платформе .NET на примере версий C# 12 и .NET 8. Книга  много лет остается настольными для .NET-разработчиков и является одним из наиболее подробных справочников по C# и .NET, учитывающим всевозможные нюансы программирования и поддержки приложений для платформ Microsoft. Рассмотрены новейшие возможности языка, особое внимание уделяется структуре языка C#, структурам данных, принципам объектно-ориентированного программирования. Отдельные главы посвящены работе с обобщенными типами, асинхронному выполнению кода, работе с памятью и разнообразным библиотекам классов, языку запросов LINQ.

Для специалистов по C# и .NET

Книга поможет вам:

  • Понять, как платформа .NET изменилась за последние годы и как это отражается на разработке приложений
  • Актуализировать информацию об объектно-ориентированном программировании на платформе .NET
  • Подбирать подходящие языковые возможности C# для решения любой задачи
  • Решать, когда лучше воспользоваться новыми возможностями, а когда придерживаться старых
  • Исследовать весь спектр функциональных возможностей применяемых в .NET библиотек классов
  • Использовать библиотеки классов для решения задач прикладного программирования
  • Разобраться с многочисленными небольшими нововведениями .NET, благодаря которым код становится гораздо выразительнее

Книга предсказуемо отличная.
Стивен Тауб, главный архитектор в компании Microsoft

В книге разобрано самое ядро языка — как раз тот материал, который необходим для создания хорошего ПО. Книга подробная, тщательно проработанная и затрагивает именно те языковые тонкости и нюансы, которым редко уделяется внимание в других книгах. Здесь всё, что нужно знать о C#.
Джереми Морган, программист, DevOps

Иэн Гриффитс

Иэн Гриффитс (Ian Griffiths) — признанный эксперт в мире информационных технологий, чье имя является синонимом глубокого понимания и мастерства в работе с платформой Microsoft.
Более 20 лет Иэн посвятил проектированию и разработке сложных программных систем, консультированию и обучению специалистов. Его карьера — это яркий путь от ведущего разработчика и архитектора до сооснователя и ключевого технического советника в endjin, британской консалтинговой компании, специализирующейся на передовых решениях в области данных, искусственного интеллекта и облачных технологий.
Иэн является не только практикующим профессионалом высочайшего класса, но и блестящим преподавателем и автором. Он обладает уникальным даром — разлагать самые сложные концепции на понятные и логичные составляющие. Это качество сделало его одним из самых востребованных инструкторов в знаменитой серии курсов O’Reilly, где его лекции по C# и платформе .NET считаются золотым стандартом.
Именно этот богатейший опыт — глубокая практика, экспертные знания и страсть к преподаванию — лег в основу книги «Современный C#». Иэн Гриффитс не просто рассказывает о языке; он погружает читателя в самую суть, учит мыслить как настоящий профессионал и создавать элегантные, эффективные и надежные приложения для любых задач.

Книгу “Современный C#. Разработка настольных, облачных, мобильных и веб-приложений” можно купить в нашем интенет-магазине.

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

Для кого предназначена эта книга…………………………………………………………………………………………… 19

Условные обозначения, используемые в этой книге………………………………………………………………. 19

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

Онлайн-обучение O’Reilly………………………………………………………………………………………………………….. 21

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

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

Глава 1. Введение в C#…………………………………………………………………………… 23

Почему именно C#?……………………………………………………………………………………………………………………. 24

Управляемый код и CLR………………………………………………………………………………………………… 26

C# предпочитает общность, а не специфичность………………………………………………………… 28

Стандарты и реализации C#…………………………………………………………………………………………………….. 29

Семейство .NET………………………………………………………………………………………………………………. 29

Циклы выпуска и долгосрочная поддержка………………………………………………………………… 31

Ориентир на несколько сред выполнения .NET…………………………………………………………… 32

Visual Studio, Visual Studio Code и JetBrains Rider…………………………………………………………………… 34

Анатомия простой программы…………………………………………………………………………………………………. 37

Написание модульного теста………………………………………………………………………………………… 41

Пространства имен…………………………………………………………………………………………………………. 46

Пространства имен и имена компонентов……………………………………………………………. 49

Разрешение неоднозначности……………………………………………………………………………….. 49

Вложенные пространства имен…………………………………………………………………………….. 50

Классы…………………………………………………………………………………………………………………………….. 51

Модульные тесты53

Резюме…………………………………………………………………………………………………………………………………………. 54

Глава 2. Основы программирования на C#……………………………………………. 55

Локальные переменные…………………………………………………………………………………………………………….. 56

Область видимости…………………………………………………………………………………………………………. 61

Неоднозначность имени переменной……………………………………………………………………………. 62

Экземпляры локальных переменных……………………………………………………………………………. 64

Операторы и выражения…………………………………………………………………………………………………………… 65

Операторы………………………………………………………………………………………………………………………. 65

Выражения………………………………………………………………………………………………………………………. 67

Комментарии и пробелы…………………………………………………………………………………………………………… 73

Директивы препроцессора………………………………………………………………………………………………………… 75

Символы компиляции…………………………………………………………………………………………………….. 75

Директивы #error и #warning………………………………………………………………………………………… 76

Директива #line………………………………………………………………………………………………………………. 77

Директива #pragma………………………………………………………………………………………………………… 77

Директива #nullable……………………………………………………………………………………………………….. 78

Директивы #region и #endregion…………………………………………………………………………………… 78

Основные типы данных…………………………………………………………………………………………………………….. 79

Числовые типы………………………………………………………………………………………………………………… 80

Числовые преобразования…………………………………………………………………………………….. 84

Проверяемый контекст…………………………………………………………………………………………… 87

Типы BigInteger, Int128, UInt128 и Half………………………………………………………………… 89

Логические значения………………………………………………………………………………………………………. 91

Строки и символы…………………………………………………………………………………………………………… 91

Неизменяемость строк……………………………………………………………………………………………. 93

Методы работы со строками………………………………………………………………………………… 93

Форматирование данных в строках……………………………………………………………………… 94

Дословные строковые литералы…………………………………………………………………………… 99

Необработанные строковые литералы……………………………………………………………… 101

Строковые литералы UTF-8………………………………………………………………………………… 103

Кортежи…………………………………………………………………………………………………………………………. 104

Деконструкция кортежа……………………………………………………………………………………………….. 107

Тип dynamic…………………………………………………………………………………………………………………… 108

Тип object………………………………………………………………………………………………………………………. 109

Операторы………………………………………………………………………………………………………………………………… 109

Управление потоком выполнения………………………………………………………………………………………….. 115

Принятие решений с операторами if…………………………………………………………………………… 116

Множественный выбор с операторами switch…………………………………………………………… 118

Циклы: while и do………………………………………………………………………………………………………….. 120

Циклы в стиле языка С…………………………………………………………………………………………………. 121

Перебор коллекции циклом foreach……………………………………………………………………………. 123

Шаблоны………………………………………………………………………………………………………………………………….. 124

Объединение и отрицание шаблонов…………………………………………………………………………. 131

Шаблоны отношений…………………………………………………………………………………………………… 132

Уточнение с помощью when………………………………………………………………………………………… 133

Шаблоны в выражениях………………………………………………………………………………………………. 133

Резюме………………………………………………………………………………………………………………………………………. 136

Глава 3. Типы………………………………………………………………………………………. 137

Классы………………………………………………………………………………………………………………………………………. 137

Входные данные инициализации……………………………………………………………………………….. 140

Статические члены………………………………………………………………………………………………………. 141

Статические классы……………………………………………………………………………………………………… 143

Записи……………………………………………………………………………………………………………………………………….. 145

Ссылки и значения null……………………………………………………………………………………………………………. 150

Удаление Null с помощью не-nullable ссылочных типов…………………………………………………….. 154

Структуры………………………………………………………………………………………………………………………………… 163

Когда писать тип значения………………………………………………………………………………………….. 167

Гарантия неизменяемости……………………………………………………………………………………………. 171

Структуры записи………………………………………………………………………………………………………… 172

Класс, структура, запись или кортеж?…………………………………………………………………………………… 173

Члены типов……………………………………………………………………………………………………………………………… 175

Доступность………………………………………………………………………………………………………………….. 175

Поля……………………………………………………………………………………………………………………………….. 175

Конструкторы……………………………………………………………………………………………………………….. 177

Конструкторы по умолчанию и конструкторы без параметров……………………… 180

Цепочка конструкторов……………………………………………………………………………………….. 183

Статические конструкторы…………………………………………………………………………………. 185

Деконструкторы……………………………………………………………………………………………………………. 190

Методы………………………………………………………………………………………………………………………….. 192

Передача аргументов по ссылке…………………………………………………………………………. 192

Ссылочные переменные и возвращаемые значения…………………………………………. 198

Необязательные аргументы………………………………………………………………………………… 201

Перегрузка…………………………………………………………………………………………………………….. 202

Переменное количество аргументов с ключевым словом params……………………. 203

Локальные функции……………………………………………………………………………………………… 205

Однострочные методы…………………………………………………………………………………………. 206

Методы расширения……………………………………………………………………………………………. 207

Свойства………………………………………………………………………………………………………………………… 208

Синтаксис инициализатора………………………………………………………………………………… 212

Свойства только для инициализации…………………………………………………………………. 213

Обязательные свойства……………………………………………………………………………………….. 215

Вычисляемые свойства………………………………………………………………………………………… 216

Свойства и изменяемые типы значений……………………………………………………………… 216

Индексаторы…………………………………………………………………………………………………………. 219

Операторы…………………………………………………………………………………………………………………….. 221

События…………………………………………………………………………………………………………………………. 224

Вложенные типы…………………………………………………………………………………………………………… 224

Интерфейсы………………………………………………………………………………………………………………………………. 226

Реализация интерфейса по умолчанию……………………………………………………………………… 228

Статические виртуальные члены……………………………………………………………………………….. 230

Перечисления…………………………………………………………………………………………………………………………… 232

Другие типы……………………………………………………………………………………………………………………………… 235

Анонимные типы……………………………………………………………………………………………………………………… 235

Частичные типы и методы………………………………………………………………………………………………………. 237

Резюме………………………………………………………………………………………………………………………………………. 239

Глава 4. Обобщенные типы…………………………………………………………………. 240

Обобщенные типы……………………………………………………………………………………………………………………. 240

Ограничения…………………………………………………………………………………………………………………………….. 243

Ограничения типа…………………………………………………………………………………………………………. 244

Ограничения типа ссылки……………………………………………………………………………………………. 246

Ограничения типа значения………………………………………………………………………………………… 249

Типы значений с ограничением unmanaged………………………………………………………………. 249

Ограничение NotNull……………………………………………………………………………………………………. 250

Другие специальные ограничения типа……………………………………………………………………… 250

Множественные ограничения……………………………………………………………………………………… 250

Значения, подобные нулю………………………………………………………………………………………………………. 251

Обобщенные методы……………………………………………………………………………………………………………….. 252

Вывод типа……………………………………………………………………………………………………………………………….. 253

Обобщенная математика………………………………………………………………………………………………………… 254

Обобщенные математические интерфейсы…………………………………………………………………………… 257

Интерфейсы числовых категорий……………………………………………………………………………….. 257

Интерфейсы операторов………………………………………………………………………………………………. 262

Интерфейсы функций……………………………………………………………………………………………………. 263

Парсинг и форматирование…………………………………………………………………………………………. 263

Обобщения и кортежи……………………………………………………………………………………………………………… 264

Резюме………………………………………………………………………………………………………………………………………. 265

Глава 5. Коллекции……………………………………………………………………………… 266

Массивы……………………………………………………………………………………………………………………………………. 266

Инициализация массива………………………………………………………………………………………………. 269

Поиск и сортировка………………………………………………………………………………………………………. 272

Многомерные массивы………………………………………………………………………………………………… 276

Зубчатые массивы……………………………………………………………………………………………….. 277

Прямоугольные массивы……………………………………………………………………………………… 279

Копирование и изменение размера…………………………………………………………………………….. 280

Класс List<Т>…………………………………………………………………………………………………………………………… 281

Интерфейсы списков и последовательностей……………………………………………………………………….. 285

Реализация списков и последовательностей…………………………………………………………………………. 291

Реализация IEnumerable<T> с итераторами……………………………………………………………… 291

Тип Collection<Т>………………………………………………………………………………………………………… 296

Тип ReadOnlyCollection<T>………………………………………………………………………………………… 297

Обращение по индексу или диапазону………………………………………………………………………………….. 297

Тип System.Index……………………………………………………………………………………………………………. 298

Тип System.Range………………………………………………………………………………………………………….. 300

Поддержка Index и Range в собственных типах………………………………………………………… 303

Словари…………………………………………………………………………………………………………………………………….. 305

Сортированные словари…………………………………………………………………………………………………………. 309

Множества……………………………………………………………………………………………………………………………….. 310

Очереди и стеки……………………………………………………………………………………………………………………….. 311

Связанные списки…………………………………………………………………………………………………………………….. 312

Конкурентные коллекции……………………………………………………………………………………………………….. 313

Неизменяемые коллекции……………………………………………………………………………………………………….. 314

“Замороженные” коллекции……………………………………………………………………………………………………. 317

Резюме………………………………………………………………………………………………………………………………………. 318

Глава 6. Наследование…………………………………………………………………………. 319

Наследование и преобразования…………………………………………………………………………………………… 320

Наследование интерфейса……………………………………………………………………………………………………… 323

Обобщения……………………………………………………………………………………………………………………………….. 325

Ковариантность и контравариантность………………………………………………………………………………… 326

Тип System.Object……………………………………………………………………………………………………………………… 331

Вездесущие методы System.Object………………………………………………………………………………………….. 332

Доступность и наследование………………………………………………………………………………………………….. 333

Виртуальные методы………………………………………………………………………………………………………………. 334

Абстрактные методы……………………………………………………………………………………………………. 337

Наследование и управление версиями библиотек…………………………………………………….. 338

Статические виртуальные методы……………………………………………………………………………… 343

Ограничения по умолчанию………………………………………………………………………………………… 345

Запечатанные методы и классы…………………………………………………………………………………………….. 347

Доступ к членам базового класса………………………………………………………………………………………….. 349

Наследование и конструкторы………………………………………………………………………………………………. 350

Первичные конструкторы……………………………………………………………………………………………. 352

Обязательные свойства………………………………………………………………………………………………… 354

Инициализация поля…………………………………………………………………………………………………….. 356

Записи……………………………………………………………………………………………………………………………………….. 357

Записи, наследование и ключевое слово with………………………………………………………………………. 359

Специальные базовые типы……………………………………………………………………………………………………. 360

Резюме………………………………………………………………………………………………………………………………………. 361

Глава 7. Время жизни объекта……………………………………………………………… 362

Сборка мусора…………………………………………………………………………………………………………………………. 362

Определение достижимости………………………………………………………………………………………… 365

Сборщик не всегда побеждает…………………………………………………………………………………….. 367

Слабые ссылки……………………………………………………………………………………………………………… 369

Возвращение памяти……………………………………………………………………………………………………. 373

Снижение нагрузки с помощью встроенных массивов……………………………………………… 378

Режимы сборщика мусора…………………………………………………………………………………………… 380

Временная приостановка сборки мусора…………………………………………………………………… 383

Случайное разрушительное сжатие…………………………………………………………………………… 384

Принудительная сборка мусора…………………………………………………………………………………. 387

Деструкторы и финализация…………………………………………………………………………………………………… 388

Интерфейс IDisposable…………………………………………………………………………………………………………….. 391

Необязательная утилизация…………………………………………………………………………………………………… 399

Упаковка…………………………………………………………………………………………………………………………………… 399

Упаковка nullable<T>…………………………………………………………………………………………………………….. 404

Резюме           405

Глава 8. Исключения……………………………………………………………………………. 406

Источники исключений…………………………………………………………………………………………………………… 408

Исключения из API……………………………………………………………………………………………………….. 409

Ошибки времени выполнения………………………………………………………………………………………. 411

Обработка исключений…………………………………………………………………………………………………………… 412

Объекты исключений……………………………………………………………………………………………………. 413

Множественные блоки catch……………………………………………………………………………………….. 415

Фильтры исключений…………………………………………………………………………………………………… 416

Вложенные блоки try……………………………………………………………………………………………………. 418

Блоки finally………………………………………………………………………………………………………………….. 419

Выброс исключений………………………………………………………………………………………………………………… 421

Повторная генерация исключений……………………………………………………………………………… 423

Быстрые ошибки…………………………………………………………………………………………………………… 425

Типы исключений…………………………………………………………………………………………………………………….. 426

Пользовательские исключения……………………………………………………………………………………………….. 428

Необработанные исключения………………………………………………………………………………………………… 430

Резюме………………………………………………………………………………………………………………………………………. 432

Глава 9. Делегаты, лямбда-выражения и события………………………………… 433

Типы делегатов………………………………………………………………………………………………………………………… 434

Создание делегата……………………………………………………………………………………………………….. 436

Множественные делегаты……………………………………………………………………………………………. 440

Вызов делегата……………………………………………………………………………………………………………… 441

Распространенные типы делегатов…………………………………………………………………………….. 442

Совместимость типов…………………………………………………………………………………………………… 444

За кадром………………………………………………………………………………………………………………………. 446

Анонимные функции………………………………………………………………………………………………………………… 448

Лямбда-выражения и аргументы по умолчанию………………………………………………………. 451

Захват переменных………………………………………………………………………………………………………. 454

Лямбда-выражения и деревья выражений………………………………………………………………….. 462

События……………………………………………………………………………………………………………………………………. 464

Стандартный паттерн делегата события…………………………………………………………………… 466

Пользовательские методы добавления и удаления…………………………………………………… 467

События и сборщик мусора…………………………………………………………………………………………. 470

События и делегаты……………………………………………………………………………………………………… 471

Делегаты против интерфейсов……………………………………………………………………………………………….. 472

Резюме………………………………………………………………………………………………………………………………………. 473

Глава 10. LINQ…………………………………………………………………………………….. 474

Выражения запроса…………………………………………………………………………………………………………………. 475

Как расписываются выражения запроса………………………………………………………………………………. 478

Отложенное вычисление…………………………………………………………………………………………………………. 480

LINQ, обобщения и IQueryable<T>………………………………………………………………………………………… 482

Стандартные операторы LINQ………………………………………………………………………………………………. 485

Фильтрация…………………………………………………………………………………………………………………… 486

Оператор Select…………………………………………………………………………………………………………….. 489

Формирование данных и анонимные типы……………………………………………………….. 490

Проекция и картографирование………………………………………………………………………….. 492

Оператор SelectMany……………………………………………………………………………………………………. 492

Сортировка……………………………………………………………………………………………………………………. 495

Проверка на наличие……………………………………………………………………………………………………. 498

Конкретные элементы и поддиапазоны……………………………………………………………………… 499

Операции, сохраняющие последовательность и порядок………………………………………… 504

Агрегация………………………………………………………………………………………………………………………. 504

Группировка…………………………………………………………………………………………………………………. 509

Преобразование……………………………………………………………………………………………………………. 514

Генерация последовательности……………………………………………………………………………………………… 519

Другие реализации LINQ………………………………………………………………………………………………………… 519

Entity Framework Core………………………………………………………………………………………………….. 519

Parallel LINQ (PLINQ)……………………………………………………………………………………………………. 520

LINQ to XML…………………………………………………………………………………………………………………. 520

IAsyncEnumerable<T>………………………………………………………………………………………………….. 521

Реактивные расширения………………………………………………………………………………………………. 521

Резюме………………………………………………………………………………………………………………………………………. 521

Глава 11. Rx: Реактивные расширения………………………………………………… 522

Фундаментальные интерфейсы………………………………………………………………………………………………. 524

Интерфейс IObserver<T>……………………………………………………………………………………………… 525

Интерфейс IObservable<T>………………………………………………………………………………………….. 526

Реализация холодного источника………………………………………………………………………. 527

Реализация горячего источника………………………………………………………………………….. 530

Публикация и подписка с использованием делегатов………………………………………………………….. 533

Создание наблюдаемого источника с помощью делегатов……………………………………… 533

Подписка на наблюдаемый источник с помощью делегата…………………………………….. 536

Создание последовательностей……………………………………………………………………………………………… 537

Empty……………………………………………………………………………………………………………………………… 538

Never………………………………………………………………………………………………………………………………. 538

Return…………………………………………………………………………………………………………………………….. 538

Throw……………………………………………………………………………………………………………………………… 539

Range……………………………………………………………………………………………………………………………… 539

Repeat…………………………………………………………………………………………………………………………….. 539

Generate…………………………………………………………………………………………………………………………. 539

Запросы LINQ………………………………………………………………………………………………………………………….. 540

Операторы группировки………………………………………………………………………………………………. 543

Операторы объединения……………………………………………………………………………………………… 544

Оператор SelectMany……………………………………………………………………………………………………. 547

Агрегация и другие операторы с одним значением…………………………………………………… 547

Оператор Concat…………………………………………………………………………………………………………… 548

Операторы запроса Rx……………………………………………………………………………………………………………. 549

Merge……………………………………………………………………………………………………………………………… 549

Оконные операторы……………………………………………………………………………………………………… 551

Операторы Window и Buffer………………………………………………………………………………… 553

Разметка окон с наблюдаемыми объектами………………………………………………………. 556

Оператор Scan………………………………………………………………………………………………………………. 557

Оператор Amb……………………………………………………………………………………………………………….. 558

Оператор DistinctUntilChanged…………………………………………………………………………………… 559

Планировщики…………………………………………………………………………………………………………………………. 559

Настройка планировщиков…………………………………………………………………………………………. 560

Метод ObserveOn………………………………………………………………………………………………….. 561

Метод SubscribeOn………………………………………………………………………………………………. 562

Явная передача планировщиков………………………………………………………………………… 562

Встроенные планировщики…………………………………………………………………………………………. 562

Субъекты………………………………………………………………………………………………………………………………….. 563

Subject<T>…………………………………………………………………………………………………………………….. 564

BehaviorSubject<T>……………………………………………………………………………………………………… 564

ReplaySubject<T>…………………………………………………………………………………………………………. 565

AsyncSubject<T>…………………………………………………………………………………………………………… 565

Адаптация………………………………………………………………………………………………………………………………… 565

IEnumerable<T> и IAsyncEnumerable<T>………………………………………………………………….. 566

События .NET……………………………………………………………………………………………………………….. 568

Асинхронные API…………………………………………………………………………………………………………. 569

Временные последовательности……………………………………………………………………………………………. 571

Источники с заданным временем………………………………………………………………………………… 571

Операторы с заданным временем……………………………………………………………………………….. 572

Операторы временного окна……………………………………………………………………………………….. 573

Reaqtor — Rx как сервис…………………………………………………………………………………………………………. 574

Резюме………………………………………………………………………………………………………………………………………. 576

Глава 12. Сборки и развертывание………………………………………………………. 577

Анатомия сборки……………………………………………………………………………………………………………………… 577

Метаданные .NET…………………………………………………………………………………………………………. 578

Ресурсы………………………………………………………………………………………………………………………….. 579

Многофайловые сборки……………………………………………………………………………………………….. 579

Другие возможности PE……………………………………………………………………………………………….. 579

Ресурсы в стиле Win32…………………………………………………………………………………………. 579

Консоль против графического интерфейса……………………………………………………….. 581

Идентичность типа………………………………………………………………………………………………………………….. 581

Развертывание………………………………………………………………………………………………………………………….. 584

Зависит от фреймворка………………………………………………………………………………………………… 585

Автономная модель………………………………………………………………………………………………………. 587

Усечение………………………………………………………………………………………………………………………… 587

Компиляция Ahead-of-Time (AOT)………………………………………………………………………………. 589

ReadyToRun………………………………………………………………………………………………………….. 589

Native АОТ…………………………………………………………………………………………………………….. 590

Загрузка сборок……………………………………………………………………………………………………………………….. 591

Разрешение сборки……………………………………………………………………………………………………….. 593

Явная загрузка………………………………………………………………………………………………………………. 595

Изоляция и плагины с помощью AssemblyLoadContext…………………………………………….. 596

Имена сборок……………………………………………………………………………………………………………………………. 598

Строгие имена………………………………………………………………………………………………………………. 598

Версия……………………………………………………………………………………………………………………………. 601

Номера версий и загрузка сборок……………………………………………………………………………….. 603

Культура……………………………………………………………………………………………………………………….. 604

Защита………………………………………………………………………………………………………………………………………. 608

Целевые фреймворки и .NET Standard……………………………………………………………………………………. 608

Резюме………………………………………………………………………………………………………………………………………. 610

Глава 13. Рефлексия…………………………………………………………………………….. 612

Типы рефлексии……………………………………………………………………………………………………………………….. 613

Класс Assembly……………………………………………………………………………………………………………… 615

Класс Module………………………………………………………………………………………………………………… 618

Тип MemberInfo…………………………………………………………………………………………………………….. 618

Type и TypeInfo………………………………………………………………………………………………………………. 621

Обобщенные типы………………………………………………………………………………………………………… 625

Классы MethodBase, ConstructorInfo и MethodInfo…………………………………………………… 626

Класс ParameterInfo……………………………………………………………………………………………………… 628

Класс FieldInfo……………………………………………………………………………………………………………… 628

Класс PropertyInfo………………………………………………………………………………………………………… 629

Класс EventInfo…………………………………………………………………………………………………………….. 629

Контексты рефлексии………………………………………………………………………………………………………………. 629

Резюме………………………………………………………………………………………………………………………………………. 631

Глава 14. Атрибуты……………………………………………………………………………… 633

Применение атрибутов……………………………………………………………………………………………………………. 633

Цели атрибутов…………………………………………………………………………………………………………….. 636

Атрибуты, обрабатываемые компилятором………………………………………………………………. 639

Имена и версии……………………………………………………………………………………………………… 640

Описание и сопутствующие ресурсы…………………………………………………………………. 641

Атрибуты информации о вызывающем объекте……………………………………………….. 642

Атрибуты, обрабатываемые CLR……………………………………………………………………………….. 646

Атрибут InternalsVisibleToAttribute……………………………………………………………………. 646

JIT-компиляция…………………………………………………………………………………………………….. 648

Атрибуты STAThread и MTAThread…………………………………………………………………….. 649

Атрибуты отладки………………………………………………………………………………………………………… 650

Атрибуты времени сборки…………………………………………………………………………………………… 650

Сериализация JSON без рефлексии…………………………………………………………………….. 650

Генерация регулярных выражений…………………………………………………………………….. 650

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

Определение и использование атрибутов……………………………………………………………………………… 652

Типы атрибутов……………………………………………………………………………………………………………. 653

Получение атрибутов…………………………………………………………………………………………………… 654

Загрузка только метаданных………………………………………………………………………………………. 656

Обобщенные типы атрибутов…………………………………………………………………………………………………. 658

Резюме………………………………………………………………………………………………………………………………………. 658

Глава 15. Файлы и потоки……………………………………………………………………. 660

Класс Stream…………………………………………………………………………………………………………………………….. 661

Позиция и поиск……………………………………………………………………………………………………………. 662

Сброс……………………………………………………………………………………………………………………………… 663

Копирование…………………………………………………………………………………………………………………. 664

Свойство Length……………………………………………………………………………………………………………. 664

Утилизация……………………………………………………………………………………………………………………. 665

Асинхронная операция………………………………………………………………………………………………… 666

Конкретные типы потоков…………………………………………………………………………………………… 667

Один тип, много поведений………………………………………………………………………………………….. 668

Текстово-ориентированные типы…………………………………………………………………………………………… 669

Абстрактные классы TextReader и TextWriter……………………………………………………………. 670

Конкретные типы читателей и писателей………………………………………………………………….. 672

Классы StreamReader и StreamWriter…………………………………………………………………. 672

Классы StringReader и StringWriter……………………………………………………………………. 673

Кодирование…………………………………………………………………………………………………………………. 674

Кодировки кодовых страниц………………………………………………………………………………. 675

Использование кодировок напрямую…………………………………………………………………. 676

Файлы и каталоги……………………………………………………………………………………………………………………. 677

Класс FileStream…………………………………………………………………………………………………………… 677

Класс File………………………………………………………………………………………………………………………. 679

Класс Directory……………………………………………………………………………………………………………… 681

Класс Path…………………………………………………………………………………………………………………….. 682

Сериализация…………………………………………………………………………………………………………………………… 683

Классы BinaryReader, BinaryWriter и BinaryPrimitives……………………………………………… 683

Сериализация CLR……………………………………………………………………………………………………….. 684

JSON……………………………………………………………………………………………………………………………….. 685

Класс JsonSerializer……………………………………………………………………………………………… 686

JSON DOM…………………………………………………………………………………………………………….. 692

Резюме………………………………………………………………………………………………………………………………………. 695

Глава 16. Многопоточность………………………………………………………………….. 697

Потоки………………………………………………………………………………………………………………………………………. 697

Потоки, переменные и общее состояние…………………………………………………………………….. 698

Локальное хранилище потока…………………………………………………………………………………….. 702

Класс Thread…………………………………………………………………………………………………………………. 704

Пул потоков…………………………………………………………………………………………………………………… 706

Запуск задач в пуле потоков с помощью Task…………………………………………………… 706

Эвристика создания потока………………………………………………………………………………… 707

Привязка к потоку и SynchronizationContext……………………………………………………………… 708

Класс ExecutionContext……………………………………………………………………………………………….. 710

Синхронизация………………………………………………………………………………………………………………………… 712

Мониторы и ключевое слово lock……………………………………………………………………………….. 713

Как расширяется ключевое слово lock………………………………………………………………. 716

Ожидание и уведомление…………………………………………………………………………………….. 717

Тайм-ауты…………………………………………………………………………………………………………….. 719

Другие примитивы синхронизации…………………………………………………………………………….. 719

Класс Interlocked………………………………………………………………………………………………………….. 720

“Ленивая” инициализация……………………………………………………………………………………………. 722

Класс Lazy<T>……………………………………………………………………………………………………… 723

Класс LazyInitializer…………………………………………………………………………………………….. 724

Прочие средства поддержки конкурентности……………………………………………………………. 724

Задачи………………………………………………………………………………………………………………………………………. 726

Классы Task и Task<T>………………………………………………………………………………………………… 726

Типы ValueTask и ValueTask<T>………………………………………………………………………… 727

Способы создания задачи…………………………………………………………………………………… 729

Статус задачи………………………………………………………………………………………………………. 729

Получение результата…………………………………………………………………………………………. 730

Продолжения………………………………………………………………………………………………………………… 731

Планировщики………………………………………………………………………………………………………………. 734

Обработка ошибок……………………………………………………………………………………………………….. 735

Пользовательские задачи без потоков……………………………………………………………………….. 736

Отношения “родитель/ребенок”………………………………………………………………………………….. 737

Составные задачи………………………………………………………………………………………………………… 738

Другие асинхронные шаблоны………………………………………………………………………………………………. 738

Отмена………………………………………………………………………………………………………………………………………. 740

Параллелизм…………………………………………………………………………………………………………………………….. 740

Класс Parallel……………………………………………………………………………………………………………….. 740

Parallel LINQ………………………………………………………………………………………………………………….. 742

TPL Dataflow…………………………………………………………………………………………………………………. 742

Резюме………………………………………………………………………………………………………………………………………. 743

Глава 17. Асинхронные функции языка………………………………………………. 744

Ключевые слова: async и await………………………………………………………………………………………………. 745

Контексты выполнения и синхронизации………………………………………………………………….. 749

Множественные операции и циклы…………………………………………………………………………….. 751

Потребление и производство асинхронных последовательностей…………………. 754

Асинхронная утилизация…………………………………………………………………………………….. 756

Возврат задачи……………………………………………………………………………………………………………… 757

Применение async к вложенным методам…………………………………………………………………… 759

Шаблон await…………………………………………………………………………………………………………………………… 759

Обработка ошибок…………………………………………………………………………………………………………………… 764

Проверка аргументов…………………………………………………………………………………………………… 766

Единичные и множественные исключения…………………………………………………………………. 768

Конкурентные операции и пропущенные исключения…………………………………………….. 769

Резюме………………………………………………………………………………………………………………………………………. 770

Глава 18. Эффективная работа с памятью……………………………………………. 772

(Не) копируйте…………………………………………………………………………………………………………………………. 773

Представление последовательных элементов с помощью Span<T>………………………………….. 776

Вспомогательные методы……………………………………………………………………………………………. 781

Выражения коллекций и последовательности…………………………………………………………… 781

Сопоставление с образцом………………………………………………………………………………………….. 782

Только стек……………………………………………………………………………………………………………………. 783

Использование ref с полями……………………………………………………………………………………………………. 783

Представление последовательности элементов с помощью Memory<T>………………………….. 787

Тип ReadOnlySequence<T>…………………………………………………………………………………………………….. 788

Обработка потоков данных с помощью конвейеров……………………………………………………………. 788

Обработка JSON в ASP.NET Core……………………………………………………………………………………………. 791

Резюме………………………………………………………………………………………………………………………………………. 796

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

Об авторе……………………………………………………………………………………………… 805

Об изображении на обложке………………………………………………………………… 806

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

Встречайте: “Основы JetPack Compose: Разработка приложений для Android с помощью Jetpack Compose, Android Studio и Kotlin”

Основы JetPack Compose: Разработка приложений для Android с помощью Jetpack Compose, Android Studio и Kotlin

Книга посвящена практическому применению Jetpack Compose — современного декларативного фреймворка для создания пользовательских интерфейсов в Android-приложениях. Показаны основы языка Kotlin, от базовых конструкций до сопрограмм и объектно-ориентированного программирования. Рассматриваются ключевые концепции Compose 1.6, включая построение пользовательских интерфейсов с помощью Composable-функций, управление состоянием, навигация, анимационные эффекты, и архитектура приложений. Отдельное внимание уделено работе с базами данных SQLite и библиотекой Room, биометрической аутентификации, встроенным покупкам, использованию карт Google Maps и публикации приложений в Google Play.
В книге представлены практические примеры и подробные пошаговые инструкции по работе в Android Studio Iguana и использованию возможностей Material Design 3.

Для начинающих и практикующих Android-разработчиков

Практическое руководство по созданию Android-приложений с использованием Jetpack Compose 1.6, Android Studio Iguana и Material Design 3.

Jetpack Compose — это современный декларативный фреймворк для разработки пользовательских интерфейсов в Android-приложениях, полностью основанный на языке Kotlin. С его помощью вы сможете создавать гибкие, масштабируемые и визуально привлекательные приложения с минимальными усилиями.

Эта книга — практическое руководство по созданию Android-приложений с использованием Jetpack Compose 1.6Android Studio Iguana и Material Design 3. Подробно рассматриваются ключевые концепции фреймворка, включая компоненты интерфейса, управление состоянием, модификаторы, навигация и анимационные эффекты.

Особое внимание уделено архитектуре проектов и современным подходам к построению пользовательского интерфейса на основе Composable-функций.

Для кого эта книга?

  • Начинающие Android-разработчики
  • Программисты, переходящие на Jetpack Compose
  • Те, кто хочет освоить современные подходы в создании мобильных приложений

Формат обучения:

  • Теория + практика
  • Пошаговые задания с готовым кодом
  • Реальные примеры и лучшие практики

Что внутри книги?

Ключевые темы:

  • Компоненты интерфейса
  • Управление состоянием
  • Модификаторы
  • Навигация
  • Анимации
  • Архитектура приложений и работа с Composable-функциями

Дополнительные технологии:

  • Kotlin (от основ до корутин и ООП)
  • Работа с данными: SQLite, Room
  • Биометрическая аутентификация
  • Интеграция Google Maps
  • Публикация в Google Play

Книгу “Основы JetPack Compose: Разработка приложений для Android с помощью Jetpack Compose, Android Studio и Kotlin” можно купить в нашем интенет-магазине.

Глава 1. Начало……………………………………………………………………………………… 22

1.1. Для Kotlin-программистов………………………………………………………………………………………………….. 23

1.2. Для новых Kotlin-программистов………………………………………………………………………………………. 23

1.3. Загрузка примеров кода……………………………………………………………………………………………………… 23

Глава 2. Настройка среды разработки Android Studio…………………………….. 24

2.1. Системные требования……………………………………………………………………………………………………….. 24

2.2. Загрузка пакета Android Studio………………………………………………………………………………………….. 24

2.3. Установка Android Studio…………………………………………………………………………………………………… 25

2.3.1. Установка в Windows……………………………………………………………………………………………….. 25

2.3.2. Установка в macOS………………………………………………………………………………………………….. 25

2.3.3. Установка в Linux…………………………………………………………………………………………………….. 26

2.4. Мастер установки Android Studio……………………………………………………………………………………… 26

2.5. Установка дополнительных пакетов Android SDK………………………………………………………….. 29

2.6. Установка инструментов командной строки Android SDK……………………………………………… 32

2.6.1. Windows 8.1……………………………………………………………………………………………………………….. 33

2.6.2. Windows 10………………………………………………………………………………………………………………… 34

2.6.3. Windows 11………………………………………………………………………………………………………………… 34

2.6.4. Linux………………………………………………………………………………………………………………………….. 34

2.6.5. macOS………………………………………………………………………………………………………………………… 34

2.7. Управлению памятью Android Studio………………………………………………………………………………… 35

2.8. Обновление Android Studio и SDK……………………………………………………………………………………… 36

2.9. Заключение………………………………………………………………………………………………………………………….. 36

Глава 3. Обзор Compose-проекта……………………………………………………………. 37

3.1. О проекте……………………………………………………………………………………………………………………………… 37

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

3.3. Создание активити……………………………………………………………………………………………………………… 39

3.4. Определение параметров проекта и настроек для SDK………………………………………………….. 39

3.5. Включение нового UI-интерфейса в проект Android Studio…………………………………………….. 41

3.6. Предварительный просмотр тестового проекта………………………………………………………………. 42

3.7. Обзор главной активити……………………………………………………………………………………………………… 46

3.8. Предварительный просмотр обновлений…………………………………………………………………………. 50

3.9. Список материалов и версия Compose……………………………………………………………………………… 51

3.10. Заключение……………………………………………………………………………………………………………………….. 52

Глава 4. Пример Compose-проекта…………………………………………………………. 53

4.1. Начало работы……………………………………………………………………………………………………………………. 53

4.2. Удаление кода шаблона…………………………………………………………………………………………………….. 53

4.3. Иерархия компонуемых функций………………………………………………………………………………………. 54

4.4. Добавление компонуемой функции DemoText…………………………………………………………………. 54

4.5. Предварительный просмотр компонуемой функции DemoText……………………………………… 56

4.6. Добавление компонуемой функции DemoSlider……………………………………………………………….. 57

4.7. Добавление компонуемой функции DemoScreen……………………………………………………………… 58

4.8. Предварительный просмотр компонуемой функции DemoScreen………………………………….. 60

4.9. Настройка параметров предварительного просмотра……………………………………………………. 61

4.10. Тестирование в интерактивном режиме………………………………………………………………………….. 62

4.11. Завершение проекта…………………………………………………………………………………………………………. 62

4.12. Заключение……………………………………………………………………………………………………………………….. 63

Глава 5. Создание виртуального Android-устройства в Android Studio……. 64

5.1. О виртуальных устройствах Android………………………………………………………………………………… 64

5.2. Запуск эмулятора……………………………………………………………………………………………………………….. 66

5.3. Запуск приложения в AVD…………………………………………………………………………………………………. 68

5.4. Обновления в реальном времени с помощью Live Edit……………………………………………………. 69

5.5. Запуск на нескольких устройствах…………………………………………………………………………………… 71

5.6. Остановка работающего приложения………………………………………………………………………………. 72

5.7. Поддержка темной темы…………………………………………………………………………………………………….. 73

5.8. Запуск эмулятора в отдельном окне…………………………………………………………………………………. 74

5.9. Отключение рамки устройства………………………………………………………………………………………….. 76

5.10. Заключение……………………………………………………………………………………………………………………….. 78

Глава 6. Использование и настройка эмулятора для AVD в Android Studio 79

6.1. Среда эмулятора…………………………………………………………………………………………………………………. 79

6.2. Панель инструментов эмулятора………………………………………………………………………………………. 80

6.3. Работа в режиме масштабирования………………………………………………………………………………….. 81

6.4. Изменение размера окна эмулятора………………………………………………………………………………….. 82

6.5. Расширенные возможности управления…………………………………………………………………………… 82

6.5.1. Location (местоположение)……………………………………………………………………………………… 83

6.5.2. Displays (дисплеи)…………………………………………………………………………………………………….. 83

6.5.3. Cellular (сотовая связь)……………………………………………………………………………………………… 83

6.5.4. Battery (аккумулятор)………………………………………………………………………………………………. 83

6.5.5. Camera (камера)……………………………………………………………………………………………………….. 83

6.5.6. Phone (телефон)………………………………………………………………………………………………………… 83

6.5.7. Directional Pad (навигационная панель)…………………………………………………………………. 84

6.5.8. Microphone (микрофон)……………………………………………………………………………………………. 84

6.5.9. Fingerprint (отпечаток пальца)…………………………………………………………………………………. 84

6.5.10. Virtual Sensors (виртуальные датчики)…………………………………………………………………. 84

6.5.11. Snapshots (снимки)………………………………………………………………………………………………….. 84

6.5.12. Record and Playback (запись и воспроизведение)………………………………………………… 84

6.5.13. Google Play………………………………………………………………………………………………………………. 84

6.5.14. Settings (настройки)………………………………………………………………………………………………… 85

6.5.15. Help (помощь)…………………………………………………………………………………………………………. 85

6.6. Работа со снимками……………………………………………………………………………………………………………. 85

6.7. Настройка эмуляции отпечатков пальцев………………………………………………………………………… 85

6.8. Эмулятор в режиме окна инструментов……………………………………………………………………………. 88

6.9. Создание эмулятора с изменяемым размером………………………………………………………………….. 88

6.10. Заключение……………………………………………………………………………………………………………………….. 89

Глава 7. Обзор пользовательского интерфейса Android Studio……………….. 90

7.1. Экран приветствия………………………………………………………………………………………………………………. 90

7.2. Строка меню………………………………………………………………………………………………………………………… 91

7.3. Главное окно……………………………………………………………………………………………………………………….. 92

7.4. Окна инструментов……………………………………………………………………………………………………………… 94

7.5. Меню окон инструментов…………………………………………………………………………………………………… 97

7.6. Сочетания клавиш………………………………………………………………………………………………………………. 98

7.7. Навигация по Switcher и Recent Files…………………………………………………………………………………. 98

7.8. Изменение темы Android Studio……………………………………………………………………………………….. 100

7.9. Заключение……………………………………………………………………………………………………………………….. 101

Глава 8. Тестирование приложений на физическом Android-устройстве. 102

8.1. Обзор Android Debug Bridge (ADB)………………………………………………………………………………….. 102

8.2. Включение отладки ADB по USB на устройствах Android…………………………………………… 102

8.2.1. Конфигурация ADB на macOS………………………………………………………………………………. 104

8.2.2. Конфигурация ADB на Windows…………………………………………………………………………… 104

8.2.3. Конфигурация ADB на Linux………………………………………………………………………………… 105

8.3. Устранение проблем с USB-подключением……………………………………………………………………. 106

8.4. Включение беспроводной отладки на устройствах Android………………………………………… 106

8.5. Тестирование соединения adb…………………………………………………………………………………………. 109

8.6. Зеркалирование устройств………………………………………………………………………………………………. 110

8.7. Заключение……………………………………………………………………………………………………………………….. 110

Глава 9. Основы редактора кода Android Studio…………………………………… 111

9.1. Редактор кода Android Studio…………………………………………………………………………………………… 111

9.2. Разделение окна редактора……………………………………………………………………………………………… 114

9.3. Автозавершение кода……………………………………………………………………………………………………….. 115

9.4. Автозавершение операторов……………………………………………………………………………………………. 117

9.5. Информация о параметрах………………………………………………………………………………………………. 117

9.6. Подсказки имен параметров…………………………………………………………………………………………….. 118

9.7. Генерация кода…………………………………………………………………………………………………………………. 118

9.8. Сокрытие кода…………………………………………………………………………………………………………………… 119

9.9. Быстрый поиск документации…………………………………………………………………………………………. 121

9.10. Переформатирование кода…………………………………………………………………………………………….. 121

9.11. Поиск примера кода……………………………………………………………………………………………………….. 123

9.12. Живые шаблоны……………………………………………………………………………………………………………… 123

9.13. Заключение……………………………………………………………………………………………………………………… 124

Глава 10. Обзор архитектуры Android………………………………………………….. 125

10.1. Программный стек Android…………………………………………………………………………………………….. 125

10.2. Ядро Linux……………………………………………………………………………………………………………………….. 126

10.3. Слой аппаратной абстракции……………………………………………………………………………………….. 126

10.4. Android Runtime — ART…………………………………………………………………………………………………. 126

10.5. Библиотеки Android………………………………………………………………………………………………………… 127

10.5.1. Библиотеки C/C++………………………………………………………………………………………………. 128

10.6. Фреймворк приложений…………………………………………………………………………………………………. 128

10.7. Приложения…………………………………………………………………………………………………………………….. 129

10.8. Заключение……………………………………………………………………………………………………………………… 129

Глава 11. Введение в Kotlin………………………………………………………………….. 130

11.1. Что такое Kotlin?……………………………………………………………………………………………………………… 130

11.2. Kotlin и Java…………………………………………………………………………………………………………………….. 130

11.3. Преобразование из Java в Kotlin……………………………………………………………………………………. 131

11.4. Kotlin и Android Studio…………………………………………………………………………………………………….. 131

11.5. Эксперименты с Kotlin……………………………………………………………………………………………………. 131

11.6. Точки с запятой в Kotlin………………………………………………………………………………………………….. 132

11.7. Заключение……………………………………………………………………………………………………………………… 133

Глава 12. Типы данных и переменные в Kotlin…………………………………….. 134

12.1. Типы данных Kotlin………………………………………………………………………………………………………… 134

12.1.1. Целочисленные типы данных……………………………………………………………………………. 135

12.1.2. Типы данных с плавающей точкой…………………………………………………………………… 135

12.1.3. Тип данных Boolean…………………………………………………………………………………………… 135

12.1.4. Символьный тип данных……………………………………………………………………………………. 136

12.1.5. Тип данных String……………………………………………………………………………………………….. 136

12.1.6. Экранированные последовательности…………………………………………………………….. 137

12.2. Изменяемые переменные………………………………………………………………………………………………… 137

12.3. Неизменяемые переменные……………………………………………………………………………………………. 138

12.4. Объявление изменяемых и неизменяемых переменных……………………………………………….. 138

12.5. Типы данных являются объектами……………………………………………………………………………….. 139

12.6. Аннотации типов и вывод типов……………………………………………………………………………………. 139

12.7. Nullable-типы…………………………………………………………………………………………………………………… 140

12.8. Оператор безопасного вызова……………………………………………………………………………………….. 141

12.9. Ненулевые утверждения………………………………………………………………………………………………… 142

12.10. Nullable-типы и функция let………………………………………………………………………………………….. 142

12.11. Поздняя инициализация (lateinit)…………………………………………………………………………………. 144

12.12. Оператор Элвиса………………………………………………………………………………………………………….. 144

12.13. Приведение типов и проверка типов…………………………………………………………………………… 145

12.14. Заключение……………………………………………………………………………………………………………………. 145

Глава 13. Операторы и выражения в Kotlin………………………………………….. 146

13.1. Синтаксис выражений в Kotlin………………………………………………………………………………………. 146

13.2. Базовый оператор присваивания………………………………………………………………………………….. 146

13.3. Арифметические операторы в Kotlin…………………………………………………………………………….. 147

13.4. Расширенные операторы присваивания………………………………………………………………………. 147

13.5. Операторы инкремента и декремента…………………………………………………………………………… 148

13.6. Операторы равенства…………………………………………………………………………………………………….. 148

13.7. Булевы логические операторы………………………………………………………………………………………. 149

13.8. Оператор диапазона………………………………………………………………………………………………………. 150

13.9. Поразрядные операторы………………………………………………………………………………………………… 150

13.9.1. Поразрядная инверсия……………………………………………………………………………………….. 151

13.9.2. Поразрядное «И»………………………………………………………………………………………………… 151

13.9.3. Поразрядное «ИЛИ»…………………………………………………………………………………………… 151

13.9.4. Побитовое исключающее «ИЛИ»……………………………………………………………………… 152

13.9.5. Поразрядный сдвиг влево………………………………………………………………………………….. 152

13.9.6. Поразрядный сдвиг вправо………………………………………………………………………………… 153

13.10. Заключение……………………………………………………………………………………………………………………. 153

Глава 14. Управление потоком в Kotlin………………………………………………… 154

14.1. Циклический поток управления…………………………………………………………………………………….. 154

14.1.1. Оператор for-in в Kotlin………………………………………………………………………………………. 154

14.1.2. Цикл while……………………………………………………………………………………………………………. 156

14.1.3. Цикл do… while…………………………………………………………………………………………………….. 156

14.1.4. Выход из циклов…………………………………………………………………………………………………. 157

14.1.5. Оператор continue………………………………………………………………………………………………. 157

14.1.6. Метки break и continue……………………………………………………………………………………….. 158

14.2. Условный поток управления………………………………………………………………………………………….. 159

14.2.1. Выражения if………………………………………………………………………………………………………. 159

14.2.2. Выражения if… else……………………………………………………………………………………………… 160

14.2.3. Выражения if… else if………………………………………………………………………………………….. 160

14.2.4. Оператор when……………………………………………………………………………………………………. 161

14.3. Заключение……………………………………………………………………………………………………………………… 161

Глава 15. Обзор функций и лямбда-выражений в Kotlin………………………. 162

15.1. Что такое функция?…………………………………………………………………………………………………………. 162

15.2. Как объявить функцию Kotlin………………………………………………………………………………………… 162

15.3. Вызов функции Kotlin……………………………………………………………………………………………………… 163

15.4. Функции с одним выражением………………………………………………………………………………………. 163

15.5. Локальные функции………………………………………………………………………………………………………… 164

15.6. Обработка возвращаемых значений…………………………………………………………………………….. 164

15.7. Объявление параметров функции по умолчанию………………………………………………………… 164

15.8. Переменное число параметров функции………………………………………………………………………. 165

15.9. Лямбда-выражения…………………………………………………………………………………………………………. 166

15.10. Функции высшего порядка…………………………………………………………………………………………… 167

15.11. Заключение……………………………………………………………………………………………………………………. 168

Глава 16. Основы объектно-ориентированного программирования
в Kotlin…………………………………………………………………………………………………. 169

16.1. Что такое объект?……………………………………………………………………………………………………………. 169

16.2. Что такое класс?……………………………………………………………………………………………………………… 169

16.3. Объявление класса в Kotlin…………………………………………………………………………………………….. 169

16.4. Добавление свойств в класс…………………………………………………………………………………………… 170

16.5. Определение методов……………………………………………………………………………………………………… 170

16.6. Объявление и инициализация экземпляра класса……………………………………………………….. 171

16.7. Главные и вторичные конструкторы…………………………………………………………………………….. 171

16.8. Блоки инициализаторов…………………………………………………………………………………………………. 173

16.9. Вызов методов и доступ к свойствам……………………………………………………………………………. 174

16.10. Пользовательские аксессоры………………………………………………………………………………………. 174

16.11. Вложенные и внутренние классы………………………………………………………………………………… 175

16.12. Объекты-компаньоны…………………………………………………………………………………………………… 176

16.13. Заключение……………………………………………………………………………………………………………………. 178

Глава 17. Введение в наследование и подклассы в Kotlin…………………….. 179

17.1. Наследование, классы и подклассы……………………………………………………………………………… 179

17.2. Синтаксис подклассов……………………………………………………………………………………………………. 179

17.3. Пример наследования в Kotlin……………………………………………………………………………………….. 181

17.4. Расширение функционала подкласса…………………………………………………………………………… 182

17.5. Переопределение унаследованных методов………………………………………………………………… 182

17.6. Добавление пользовательского вторичного конструктора………………………………………… 184

17.7. Использование класса SavingsAccount…………………………………………………………………………. 184

17.8. Заключение……………………………………………………………………………………………………………………… 185

Глава 18. Обзор Compose……………………………………………………………………… 186

18.1. Разработка до Compose…………………………………………………………………………………………………. 186

18.2. Декларативный синтаксис Compose…………………………………………………………………………….. 187

18.3. Compose, управляемый данными………………………………………………………………………………….. 187

18.4. Заключение……………………………………………………………………………………………………………………… 188

Глава 19. Руководство по каталогам версий Gradle……………………………… 189

19.1. Зависимости библиотек и плагинов………………………………………………………………………………. 189

19.2. Файл сборки пакета в Gradle………………………………………………………………………………………….. 189

19.3. Файлы сборки модуля в Gradle………………………………………………………………………………………. 190

19.4. Файл version catalog………………………………………………………………………………………………………… 190

19.5. Добавление зависимостей……………………………………………………………………………………………… 192

19.6. Обновления библиотек…………………………………………………………………………………………………… 193

19.7. Заключение……………………………………………………………………………………………………………………… 193

Глава 20. Обзор компонуемых функций………………………………………………. 194

20.1. Что такое компонуемая функция?…………………………………………………………………………………. 194

20.2. Компонуемые функции с сохранением и без сохранения состояния…………………………. 194

20.3. Синтаксис компонуемой функции…………………………………………………………………………………. 195

20.4. Компонуемые функции Foundation и Material……………………………………………………………… 197

20.5. Заключение……………………………………………………………………………………………………………………… 199

Глава 21. Обзор состояния и рекомпозиции в Compose………………………… 200

21.1. Основы состояния…………………………………………………………………………………………………………… 200

21.2. Знакомство с рекомпозицией…………………………………………………………………………………………. 200

21.3. Создание проекта StateExample……………………………………………………………………………………. 201

21.4. Объявление состояния в компонуемой функции………………………………………………………….. 201

21.5. Однонаправленный поток данных………………………………………………………………………………… 205

21.6. Подъем состояния…………………………………………………………………………………………………………… 207

21.7. Сохранение состояния через изменения конфигурации……………………………………………… 210

21.8. Заключение……………………………………………………………………………………………………………………… 211

Глава 22. Введение в Composition Local………………………………………………… 213

22.1. Понимание CompositionLocal………………………………………………………………………………………… 213

22.2. Использование CompositionLocal………………………………………………………………………………….. 215

22.3. Создание проекта CompLocalDemo……………………………………………………………………………… 215

22.4. Разработка макета………………………………………………………………………………………………………….. 216

22.5. Добавление состояния CompositionLocal…………………………………………………………………….. 217

22.6. Доступ к состоянию CompositionLocal…………………………………………………………………………. 218

22.7. Тестирование дизайна……………………………………………………………………………………………………. 218

22.8. Заключение……………………………………………………………………………………………………………………… 220

Глава 23. Обзор API-слотов в Compose…………………………………………………. 221

23.1. Понимание API-слотов…………………………………………………………………………………………………… 221

23.2. Объявление API-слота……………………………………………………………………………………………………. 222

23.3. Вызов компонуемых API-слотов……………………………………………………………………………………. 223

23.4. Заключение……………………………………………………………………………………………………………………… 224

Глава 24. Пособие по API-слотам в Compose………………………………………… 225

24.1. О проекте…………………………………………………………………………………………………………………………. 225

24.2. Создание проекта SlotApiDemo…………………………………………………………………………………….. 225

24.3. Подготовка файла для класса MainActivity…………………………………………………………………. 225

24.4. Создание компонуемой функции MainScreen………………………………………………………………. 226

24.5. Добавление компонуемой функции ScreenContent………………………………………………………. 227

24.6. Создание компонуемой функции Checkbox…………………………………………………………………. 228

24.7. Реализация API-слотов в ScreenContent……………………………………………………………………….. 229

24.8. Добавление ресурса рисования изображения……………………………………………………………… 231

24.9. Кодирование компонуемой функции TitleImage………………………………………………………….. 233

24.10. Заполнение компонуемой функции MainScreen…………………………………………………………. 233

24.11. Предварительный просмотр проекта………………………………………………………………………….. 235

24.12. Заключение……………………………………………………………………………………………………………………. 237

Глава 25. Использование модификаторов в Compose……………………………. 238

25.1. Обзор модификаторов…………………………………………………………………………………………………….. 238

25.2. Создание проекта ModifierDemo…………………………………………………………………………………… 239

25.3. Создание модификатора………………………………………………………………………………………………… 240

25.4. Порядок модификаторов………………………………………………………………………………………………… 241

25.5. Добавление поддержки модификаторов в компонуемую функцию…………………………… 242

25.6. Общие встроенные модификаторы……………………………………………………………………………….. 246

25.7. Объединение модификаторов………………………………………………………………………………………… 246

25.8. Заключение……………………………………………………………………………………………………………………… 247

Глава 26. Аннотированные строки и стили инструмента Brush……………. 248

26.1. Что такое аннотированные строки?……………………………………………………………………………… 248

26.2. Использование аннотированных строк………………………………………………………………………… 248

26.3. Стилизация текста с помощью инструмента Brush……………………………………………………… 249

26.4. Создание проекта для демонстрации……………………………………………………………………………. 250

26.5. Пример аннотированной строки SpanStyle………………………………………………………………….. 250

26.6. Пример аннотированной строки ParagraphStyle………………………………………………………….. 252

26.7. Пример стиля Brush………………………………………………………………………………………………………… 254

26.8. Заключение……………………………………………………………………………………………………………………… 256

Глава 27. Создание макетов с помощью компонуемых функций Row и Column   257

27.1. Создание проекта RowColDemo……………………………………………………………………………………. 257

27.2. Компонуемая функция Row……………………………………………………………………………………………. 258

27.3. Компонуемая функция Column……………………………………………………………………………………… 259

27.4. Объединение компонуемых функций Row и Column…………………………………………………… 259

27.5. Выравнивание макета…………………………………………………………………………………………………….. 260

27.6. Позиционирование макета…………………………………………………………………………………………….. 263

27.7. Интервал между расположениями макета……………………………………………………………………. 265

27.8. Модификаторы области действия для компонентов Row и Column………………………….. 266

27.9. Веса модификаторов области действия……………………………………………………………………….. 270

27.10. Заключение……………………………………………………………………………………………………………………. 271

Глава 28. Макеты компонента Box в Compose……………………………………… 272

28.1. Введение в компонуемую функцию Box……………………………………………………………………….. 272

28.2. Создание проекта BoxLayout………………………………………………………………………………………… 272

28.3. Добавление компонуемой функции TextCell………………………………………………………………… 273

28.4. Добавление макета Box…………………………………………………………………………………………………. 273

28.5. Выравнивание в Box………………………………………………………………………………………………………. 274

28.6. Модификаторы области действия BoxScope……………………………………………………………….. 276

28.7. Использование модификатора clip………………………………………………………………………………… 277

28.8. Заключение……………………………………………………………………………………………………………………… 278

Глава 29. Введение в FlowRow и FlowColumn……………………………………….. 279

29.1. Компонуемые функции FlowColumn и FlowRow………………………………………………………….. 279

29.2. Максимальное количество элементов………………………………………………………………………….. 280

29.3. Работа с расположением главной оси………………………………………………………………………….. 281

29.4. Понимание поперечного расположения по осям…………………………………………………………. 282

29.5. Выравнивание элементов………………………………………………………………………………………………. 282

29.6. Управление размером элемента……………………………………………………………………………………. 283

29.7. Заключение……………………………………………………………………………………………………………………… 284

Глава 30. Руководство по FlowRow и FlowColumn………………………………… 285

30.1. Создание проекта FlowLayoutDemo……………………………………………………………………………… 285

30.2. Генерация случайных значений для высоты и цвета………………………………………………….. 286

30.3. Добавление компонуемой функции Box……………………………………………………………………….. 287

30.4. Изменение расположения макета Flow…………………………………………………………………………. 288

30.5. Изменение выравнивания элементов…………………………………………………………………………….. 289

30.6. Переключение на FlowColumn………………………………………………………………………………………. 290

30.7. Использование перекрестного расположения……………………………………………………………… 291

30.8. Добавление весов для элементов…………………………………………………………………………………… 292

30.9. Заключение……………………………………………………………………………………………………………………… 293

Глава 31. Пользовательские модификаторы макета…………………………….. 294

31.1. Основы компоновки макета в Compose………………………………………………………………………… 294

31.2. Пользовательские макеты………………………………………………………………………………………………. 295

31.3. Создание проекта LayoutModifier…………………………………………………………………………………. 295

31.4. Добавление компонуемой функции ColorBox………………………………………………………………. 295

31.5. Создание пользовательского модификатора макета…………………………………………………… 296

31.6. Понимание позиции по умолчанию………………………………………………………………………………. 297

31.7. Завершение модификатора макета……………………………………………………………………………….. 297

31.8. Использование пользовательского модификатора……………………………………………………… 299

31.9. Работа с линиями выравнивания…………………………………………………………………………………… 299

31.10. Работа с базовыми линиями………………………………………………………………………………………… 302

31.11. Заключение……………………………………………………………………………………………………………………. 303

Глава 32. Создание пользовательских макетов…………………………………….. 304

32.1. Обзор пользовательских макетов………………………………………………………………………………….. 304

32.2. Синтаксис пользовательского макета…………………………………………………………………………… 304

32.3. Использование пользовательского макета…………………………………………………………………… 306

32.4. Создание проекта CustomLayout………………………………………………………………………………….. 306

32.5. Создание компонуемой функции CascadeLayout………………………………………………………… 307

32.6. Использование компонуемой функции CascadeLayout………………………………………………. 309

32.7. Заключение……………………………………………………………………………………………………………………… 310

Глава 33. Руководство по ConstraintLayout в Compose…………………………. 311

33.1. Введение в ConstraintLayout………………………………………………………………………………………….. 311

33.2. Как работает ConstraintLayout……………………………………………………………………………………… 311

33.2.1. Ограничения……………………………………………………………………………………………………….. 312

33.2.2. Поля……………………………………………………………………………………………………………………… 312

33.2.3. Противоположные ограничения……………………………………………………………………….. 313

33.2.4. Смещение ограничений……………………………………………………………………………………… 313

33.2.5. Цепочки……………………………………………………………………………………………………………….. 314

33.2.6. Стили цепочки…………………………………………………………………………………………………….. 315

33.3. Настройка размеров……………………………………………………………………………………………………….. 316

33.4. Направляющие линии…………………………………………………………………………………………………….. 317

33.5. Барьеры……………………………………………………………………………………………………………………………. 317

33.6. Заключение……………………………………………………………………………………………………………………… 319

Глава 34. Работа с ConstraintLayout в Compose…………………………………….. 320

34.1. Вызов ConstraintLayout………………………………………………………………………………………………….. 320

34.2. Генерация ссылок…………………………………………………………………………………………………………… 320

34.3. Назначение ссылки на компонуемую функцию…………………………………………………………… 321

34.4. Добавление ограничений……………………………………………………………………………………………….. 321

34.5. Создание проекта ConstraintLayout……………………………………………………………………………… 322

34.6. Добавление библиотеки ConstraintLayout……………………………………………………………………. 322

34.7. Добавление пользовательской компонуемой функции button……………………………………. 323

34.8. Базовые ограничения……………………………………………………………………………………………………… 324

34.9. Противоположные ограничения……………………………………………………………………………………. 325

34.10. Смещение ограничений………………………………………………………………………………………………… 327

34.11. Ограничения полями…………………………………………………………………………………………………….. 327

34.12. Важность противоположных ограничений и смещений…………………………………………… 329

34.13. Создание цепочек…………………………………………………………………………………………………………. 332

34.14. Работа с направляющими линиями…………………………………………………………………………….. 333

34.15. Работа с барьерами………………………………………………………………………………………………………. 334

34.16. Наборы ограничений……………………………………………………………………………………………………. 338

34.17. Заключение……………………………………………………………………………………………………………………. 340

Глава 35. Работа с IntrinsicSize в Compose…………………………………………….. 341

35.1. Внутренние измерения……………………………………………………………………………………………………. 341

35.2. Измерение максимального и минимального внутреннего размера……………………………. 342

35.3. О проекте…………………………………………………………………………………………………………………………. 343

35.4. Создание проекта IntrinsicSizeDemo……………………………………………………………………………… 343

35.5. Создание пользовательского текстового поля…………………………………………………………….. 344

35.6. Добавление компонентов Text и Box……………………………………………………………………………. 344

35.7. Добавление столбца верхнего уровня………………………………………………………………………….. 345

35.8. Тестирование проекта……………………………………………………………………………………………………. 346

35.9. Применение измерений IntrinsicSize.Max……………………………………………………………………… 346

35.10. Применение измерений IntrinsicSize.Min…………………………………………………………………….. 347

35.11. Заключение……………………………………………………………………………………………………………………. 347

Глава 36. Корутины и LaunchedEffects в Jetpack Compose…………………….. 348

36.1. Что такое корутины?………………………………………………………………………………………………………. 348

36.2. Потоки против корутинов………………………………………………………………………………………………. 349

36.3. Область действия корутинов…………………………………………………………………………………………. 349

36.4. Функции приостановки…………………………………………………………………………………………………… 350

36.5. Диспетчеры корутинов…………………………………………………………………………………………………… 350

36.6. Конструкторы корутинов………………………………………………………………………………………………. 351

36.7. Job…………………………………………………………………………………………………………………………………….. 352

36.8. Приостановка и возобновление корутинов………………………………………………………………….. 352

36.9. Канал связи для корутинов……………………………………………………………………………………………. 354

36.10. Понимание побочных эффектов………………………………………………………………………………….. 354

36.11. Заключение……………………………………………………………………………………………………………………. 356

Глава 37. Обзор компонуемых функций List и Grid в Compose…………….. 357

37.1. Стандартные и ленивые списки…………………………………………………………………………………….. 357

37.2. Работа со списками Column и Row……………………………………………………………………………….. 358

37.3. Создание ленивых списков…………………………………………………………………………………………….. 358

37.4. Включение прокрутки с помощью ScrollState………………………………………………………………. 359

37.5. Программная прокрутка………………………………………………………………………………………………… 360

37.6. Липкие заголовки……………………………………………………………………………………………………………. 362

37.7. Создание ленивой сетки…………………………………………………………………………………………………. 364

37.8. Заключение……………………………………………………………………………………………………………………… 366

Глава 38. Руководство по спискам на основе Row и Column………………… 367

38.1. Создание проекта ListDemo…………………………………………………………………………………………… 367

38.2. Создание списка на основе Column………………………………………………………………………………. 367

38.3. Включение прокрутки списка………………………………………………………………………………………… 369

38.4. Ручная прокрутка……………………………………………………………………………………………………………. 370

38.5. Пример списка на основе Row……………………………………………………………………………………….. 372

38.6. Заключение……………………………………………………………………………………………………………………… 373

Глава 39. Руководство по ленивым спискам в Compose……………………….. 374

39.1. Создание проекта LazyListDemo…………………………………………………………………………………… 374

39.2. Добавление данных списка в проект…………………………………………………………………………….. 374

39.3. Чтение данных XML……………………………………………………………………………………………………….. 376

39.4. Обработка загрузки изображений…………………………………………………………………………………. 377

39.5. Проектирование компонуемой функции для элементов списка…………………………………. 380

39.6. Создание ленивого списка……………………………………………………………………………………………… 381

39.7. Тестирование проекта……………………………………………………………………………………………………. 382

39.8. Делаем элементы списка интерактивными…………………………………………………………………… 383

39.9. Заключение……………………………………………………………………………………………………………………… 385

Глава 40. Липкие заголовки и обнаружение прокрутки в ленивых списках 386

40.1. Группировка данных в элементах списка……………………………………………………………………. 386

40.2. Отображение заголовков и элементов………………………………………………………………………….. 386

40.3. Добавление липких заголовков……………………………………………………………………………………… 387

40.4. Реакция на изменение позиции прокрутки……………………………………………………………………. 389

40.5. Добавление кнопки прокрутки………………………………………………………………………………………. 390

40.6. Тестирование готового приложения……………………………………………………………………………… 392

40.7. Заключение……………………………………………………………………………………………………………………… 392

Глава 41. Руководство по ленивой неравномерной сетке в Compose…….. 393

41.1. Ленивые неравномерные сетки……………………………………………………………………………………… 393

41.2. Создание проекта StaggeredGridDemo………………………………………………………………………….. 395

41.3. Добавление компонуемой функции Box……………………………………………………………………….. 395

41.4. Генерация случайных значений высоты и цвета…………………………………………………………. 396

41.5. Создание неравномерного списка…………………………………………………………………………………. 397

41.6. Тестирование проекта……………………………………………………………………………………………………. 398

41.7. Переключение на горизонтальную неравномерную сетку…………………………………………. 398

41.8. Заключение……………………………………………………………………………………………………………………… 400

Глава 42. VerticalPager и HorizontalPager в Compose……………………………. 401

42.1. Компонуемая функция Pager………………………………………………………………………………………….. 401

42.2. Работа с состоянием пейджера……………………………………………………………………………………… 403

42.3. О проекте PagerDemo……………………………………………………………………………………………………… 404

42.4. Создание проекта PagerDemo………………………………………………………………………………………… 404

42.5. Добавление изображений с обложками книг……………………………………………………………….. 404

42.6. Добавление HorizontalPager…………………………………………………………………………………………… 405

42.7. Создание содержимого страницы…………………………………………………………………………………. 406

42.8. Тестирование пейджера…………………………………………………………………………………………………. 407

42.9. Добавление кнопок со стрелками………………………………………………………………………………….. 408

42.10. Заключение……………………………………………………………………………………………………………………. 411

Глава 43. Анимация в Compose…………………………………………………………….. 412

43.1. Создание проекта AnimateVisibility………………………………………………………………………………. 412

43.2. Анимация видимости………………………………………………………………………………………………………. 413

43.3. Определение анимаций входа и выхода………………………………………………………………………. 416

43.4. Спецификации и плавность анимации………………………………………………………………………….. 417

43.5. Повтор анимации……………………………………………………………………………………………………………. 419

43.6. Разные анимации для разных дочерних элементов…………………………………………………….. 419

43.7. Автозапуск анимации…………………………………………………………………………………………………….. 421

43.8. Реализация кроссфейдинга…………………………………………………………………………………………….. 422

43.9. Заключение……………………………………………………………………………………………………………………… 423

Глава 44. Анимация, основанная на состоянии……………………………………. 424

44.1. Понимание анимации, управляемой состоянием…………………………………………………………. 424

44.2. Знакомство с функциями «анимация как состояние»…………………………………………………… 424

44.3. Создание проекта AnimateState…………………………………………………………………………………….. 425

44.4. Анимация вращения с помощью animateFloatAsState…………………………………………………. 426

44.5. Анимация изменения цвета с помощью animateColorAsState…………………………………….. 429

44.6. Анимация движения с помощью animateDpAsState…………………………………………………….. 432

44.7. Добавление эффектов пружины…………………………………………………………………………………….. 435

44.8. Работа с ключевыми кадрами……………………………………………………………………………………….. 436

44.9. Объединение нескольких анимаций……………………………………………………………………………… 437

44.10. Использование инспектора анимации………………………………………………………………………… 440

44.11. Заключение……………………………………………………………………………………………………………………. 441

Глава 45. Рисование графики с помощью Canvas в Compose……………….. 442

45.1. Знакомство с компонентом Canvas……………………………………………………………………………….. 442

45.2. Создание проекта CanvasDemo…………………………………………………………………………………….. 442

45.3. Рисование линии и получение размера холста……………………………………………………………. 443

45.4. Рисование пунктирных линий……………………………………………………………………………………….. 444

45.5. Рисование прямоугольника……………………………………………………………………………………………. 445

45.6. Применение вращения……………………………………………………………………………………………………. 449

45.7. Рисование кругов и овалов…………………………………………………………………………………………….. 449

45.8. Рисование градиентов…………………………………………………………………………………………………….. 451

45.9. Рисование дуг………………………………………………………………………………………………………………….. 454

45.10. Рисование путей……………………………………………………………………………………………………………. 455

45.11. Рисование точек……………………………………………………………………………………………………………. 456

45.12. Рисование изображения……………………………………………………………………………………………….. 457

45.13. Рисование текста…………………………………………………………………………………………………………… 460

45.14. Заключение……………………………………………………………………………………………………………………. 462

Глава 46. Работа с ViewModels в Compose…………………………………………….. 463

46.1. Что такое Android Jetpack?…………………………………………………………………………………………….. 463

46.2. «Старая» архитектура……………………………………………………………………………………………………. 463

46.3. Современная архитектура Android……………………………………………………………………………….. 464

46.4. Компонент ViewModel……………………………………………………………………………………………………. 464

46.5. Реализация ViewModel с помощью состояния……………………………………………………………… 465

46.6. Подключение состояния ViewModel к активити…………………………………………………………… 466

46.7. Реализация ViewModel с использованием LiveData…………………………………………………….. 468

46.8. Наблюдение за LiveData для ViewModel внутри активити…………………………………………. 468

46.9. Заключение……………………………………………………………………………………………………………………… 469

Глава 47. Руководство по ViewModel в Compose…………………………………… 470

47.1. О проекте…………………………………………………………………………………………………………………………. 470

47.2. Создание проекта ViewModelDemo………………………………………………………………………………. 471

47.3. Добавление ViewModel…………………………………………………………………………………………………… 472

47.4. Доступ к DemoViewModel из MainActivity……………………………………………………………………. 473

47.5. Проектирование компонуемой функции для ввода температуры………………………………. 474

47.6. Проектирование компонуемой функции для ввода температуры………………………………. 476

47.7. Завершение дизайна пользовательского интерфейса…………………………………………………. 479

47.8. Тестирование приложения…………………………………………………………………………………………….. 480

47.9. Заключение……………………………………………………………………………………………………………………… 480

Глава 48. Обзор базы данных SQLite……………………………………………………. 481

48.1. Понимание таблиц базы данных…………………………………………………………………………………… 481

48.2. Знакомство со схемой базы данных……………………………………………………………………………… 481

48.3. Столбцы и типы данных………………………………………………………………………………………………… 482

48.4. Строки базы данных………………………………………………………………………………………………………. 482

48.5. Введение в первичные ключи………………………………………………………………………………………… 482

48.6. Что такое SQLite?……………………………………………………………………………………………………………. 483

48.7. Язык структурированных запросов………………………………………………………………………………. 483

48.8. Тестирование SQLite на виртуальном устройстве Android…………………………………………. 484

48.9. Android-библиотека Room для хранения данных на устройстве………………………………. 486

48.10. Заключение……………………………………………………………………………………………………………………. 486

Глава 49. Базы данных Room в Compose………………………………………………. 487

49.1. Пересмотр современной архитектуры приложений……………………………………………………. 487

49.2. Ключевые элементы базы данных Room……………………………………………………………………… 488

49.2.1. Репозиторий………………………………………………………………………………………………………… 488

49.2.2. База данных Room…………………………………………………………………………………………….. 488

49.2.3. Объект доступа к данным (DAO)………………………………………………………………………. 488

49.2.4. Сущности…………………………………………………………………………………………………………….. 488

49.2.5. База данных SQLite……………………………………………………………………………………………. 489

49.3. Понимание сущностей……………………………………………………………………………………………………. 490

49.4. Объекты доступа к данным……………………………………………………………………………………………. 492

49.5. База данных Room…………………………………………………………………………………………………………. 494

49.6. Репозиторий…………………………………………………………………………………………………………………….. 495

49.7. Базы данных, хранящиеся в памяти……………………………………………………………………………… 496

49.8. Инспектор баз данных……………………………………………………………………………………………………. 496

49.9. Заключение……………………………………………………………………………………………………………………… 497

Глава 50. Руководство по базам данных Room и Репозиторию в Compose 498

50.1. О проекте RoomDemo…………………………………………………………………………………………………….. 498

50.2. Создание проекта RoomDemo………………………………………………………………………………………. 498

50.3. Модификация конфигурации сборки…………………………………………………………………………….. 499

50.4. Создание сущности………………………………………………………………………………………………………… 501

50.5. Создание DAO…………………………………………………………………………………………………………………. 502

50.6. Добавление базы данных Room……………………………………………………………………………………. 503

50.7. Добавление репозитория……………………………………………………………………………………………….. 504

50.8. Добавление ViewModel…………………………………………………………………………………………………… 506

50.9. Проектирование пользовательского интерфейса………………………………………………………… 508

50.10. Написание класса ViewModelProviderFactory……………………………………………………………. 510

50.11. Завершение функции MainScreen………………………………………………………………………………… 512

50.12. Тестирование приложения RoomDemo………………………………………………………………………. 515

50.13. Использование Database Inspector………………………………………………………………………………. 515

50.14. Заключение……………………………………………………………………………………………………………………. 516

Глава 51. Обзор навигации в Compose…………………………………………………. 517

51.1. Понимание навигации…………………………………………………………………………………………………….. 517

51.2. Объявление контроллера навигации…………………………………………………………………………….. 519

51.3. Объявление хоста навигации…………………………………………………………………………………………. 519

51.4. Добавление пунктов назначения в навигационный граф……………………………………………. 520

51.5. Навигация к пунктам назначения………………………………………………………………………………….. 522

51.6. Передача аргументов в пункт назначения……………………………………………………………………. 523

51.7. Работа с нижними навигационными панелями……………………………………………………………. 525

51.8. Заключение……………………………………………………………………………………………………………………… 526

Глава 52. Руководство по навигации в Compose…………………………………… 527

52.1. Создание проекта NavigationDemo……………………………………………………………………………….. 527

52.2. О проекте NavigationDemo…………………………………………………………………………………………….. 528

52.3. Объявление маршрутов навигации……………………………………………………………………………….. 528

52.4. Добавление домашнего экрана……………………………………………………………………………………… 528

52.5. Добавление экрана приветствия……………………………………………………………………………………. 530

52.6. Добавление экрана профиля………………………………………………………………………………………….. 531

52.7. Создание контроллера навигации и хоста…………………………………………………………………… 531

52.8. Реализация навигации по экрану………………………………………………………………………………….. 532

52.9. Передача аргумента имени пользователя……………………………………………………………………. 533

52.10. Тестирование проекта………………………………………………………………………………………………….. 534

52.11. Заключение……………………………………………………………………………………………………………………. 535

Глава 53. Руководство по навигационной панели в Compose……………….. 536

53.1. Создание проекта BottomBarDemo………………………………………………………………………………. 536

53.2. Объявление маршрутов навигации……………………………………………………………………………….. 537

53.3. Проектирование элементов панели………………………………………………………………………………. 537

53.4. Создание списка элементов панели………………………………………………………………………………. 538

53.5. Добавление экранов назначения…………………………………………………………………………………… 539

53.6. Создание контроллера и хоста навигации…………………………………………………………………… 541

53.7. Проектирование панели навигации………………………………………………………………………………. 541

53.8. Работа с компонентом Scaffold……………………………………………………………………………………… 543

53.9. Тестирование проекта……………………………………………………………………………………………………. 544

53.10. Заключение……………………………………………………………………………………………………………………. 545

Глава 54. Распознавание жестов в Compose………………………………………….. 546

54.1. Распознавание жестов в Compose…………………………………………………………………………………. 546

54.2. Создание проекта GestureDemo…………………………………………………………………………………….. 546

54.3. Обнаружение жестов нажатия………………………………………………………………………………………. 547

54.4. Обнаружение нажатий с помощью PointerInputScope………………………………………………… 548

54.5. Обнаружение жестов перетаскивания………………………………………………………………………….. 550

54.6. Обнаружение жестов перетаскивания с помощью PointerInputScope……………………….. 552

54.7. Прокрутка с помощью модификатора scrollable………………………………………………………….. 553

54.8. Модификаторы прокрутки…………………………………………………………………………………………….. 554

54.9. Обнаружение жестов сжатия…………………………………………………………………………………………. 556

54.10. Определение жестов вращения……………………………………………………………………………………. 558

54.11. Обнаружение жестов сдвига………………………………………………………………………………………… 559

54.12. Заключение……………………………………………………………………………………………………………………. 560

Глава 55. Работа с закрепленными перетаскиваемыми компонентами… 561

55.1. Перетаскивание и якоря…………………………………………………………………………………………………. 561

55.2. Обнаружение жестов перетаскивания………………………………………………………………………….. 561

55.3. Объявление точек привязки……………………………………………………………………………………………. 562

55.4. Объявление порогов……………………………………………………………………………………………………….. 562

55.5. Объявление перетаскиваемого состояния…………………………………………………………………….. 562

55.6. Перемещение компонента в ответ на жест перетаскивания……………………………………….. 563

55.7. О проекте DraggableDemo………………………………………………………………………………………………. 564

55.8. Создание проекта DraggableDemo………………………………………………………………………………… 564

55.9. Добавление библиотеки Foundation……………………………………………………………………………… 565

55.10. Добавление перечислений якорей………………………………………………………………………………. 565

55.11. Настройка перетаскиваемого состояния и якорей…………………………………………………….. 566

55.12. Проектирование родительского элемента Box………………………………………………………….. 567

55.13. Добавление перетаскиваемого элемента Box……………………………………………………………. 569

55.14. Тестирование проекта………………………………………………………………………………………………….. 572

55.15. Заключение……………………………………………………………………………………………………………………. 572

Глава 56. Введение в потоки Kotlin………………………………………………………. 573

56.1. Понимание потоков………………………………………………………………………………………………………… 573

56.2. Создание примера проекта……………………………………………………………………………………………. 574

56.3. Добавление модели представления в проект……………………………………………………………….. 575

56.4. Объявление потока…………………………………………………………………………………………………………. 575

56.5. Передача потоковых данных………………………………………………………………………………………… 576

56.6. Сбор потоковых данных в виде состояния…………………………………………………………………… 577

56.7. Преобразование данных с помощью посредников……………………………………………………… 578

56.8. Сбор потоковых данных………………………………………………………………………………………………… 580

56.9. Добавление буфера потока……………………………………………………………………………………………. 582

56.10. Другие терминальные операторы потока………………………………………………………………….. 583

56.11. Выравнивание потока………………………………………………………………………………………………….. 584

56.12. Объединение нескольких потоков……………………………………………………………………………….. 586

56.13. Горячие и холодные потоки………………………………………………………………………………………… 587

56.14. StateFlow………………………………………………………………………………………………………………………… 587

56.15. SharedFlow……………………………………………………………………………………………………………………… 589

56.16. Преобразование холодного потока в горячий…………………………………………………………… 591

56.17. Заключение……………………………………………………………………………………………………………………. 591

Глава 57. Руководство по SharedFlow в Compose………………………………….. 592

57.1. О проекте…………………………………………………………………………………………………………………………. 592

57.2. Создание проекта SharedFlowDemo……………………………………………………………………………… 592

57.3. Добавление модели представления в проект……………………………………………………………….. 593

57.4. Объявление SharedFlow………………………………………………………………………………………………….. 594

57.5. Сбор значений из потока……………………………………………………………………………………………….. 595

57.6. Тестирование приложения SharedFlowDemo……………………………………………………………….. 596

57.7. Обработка потоков в фоновом режиме…………………………………………………………………………. 597

57.8. Заключение……………………………………………………………………………………………………………………… 599

Глава 58. Руководство по биометрической аутентификации в Android… 600

58.1. Обзор биометрической аутентификации………………………………………………………………………. 600

58.2. Создание проекта биометрической аутентификации………………………………………………….. 600

58.3. Добавление биометрической зависимости…………………………………………………………………… 601

58.4. Настройка аутентификации по отпечаткам пальцев………………………………………………….. 601

58.5. Добавление биометрических разрешений в файл манифеста…………………………………….. 602

58.6. Проверка настроек безопасности………………………………………………………………………………….. 603

58.7. Проектирование пользовательского интерфейса………………………………………………………… 604

58.8. Настройка колбэков аутентификации………………………………………………………………………….. 605

58.9. Запуск биометрического запроса………………………………………………………………………………….. 606

58.10. Тестирование проекта………………………………………………………………………………………………….. 607

58.11. Заключение……………………………………………………………………………………………………………………. 607

Глава 59. Работа с Google Maps API в Android Studio……………………………. 608

59.1. Элементы Google Maps…………………………………………………………………………………………………… 608

59.2. Создание проекта Google Maps……………………………………………………………………………………… 609

59.3. Создание учетной записи Google Cloud………………………………………………………………………… 609

59.4. Создание нового проекта Google Cloud………………………………………………………………………… 610

59.5. Включение Google Maps SDK………………………………………………………………………………………… 611

59.6. Генерация ключа Google Maps………………………………………………………………………………………. 612

59.7. Добавление ключа API в проект……………………………………………………………………………………. 612

59.8. Добавление зависимости Compose Map………………………………………………………………………. 614

59.9. Создание карты………………………………………………………………………………………………………………. 614

59.10. Тестирование приложения…………………………………………………………………………………………… 614

59.11. Понимание геокодирования и обратного геокодирования……………………………………….. 615

59.12. Указание местоположения на карте……………………………………………………………………………. 617

59.13. Изменение типа карты………………………………………………………………………………………………….. 618

59.14. Отображение элементов управления картой для пользователя………………………………. 620

59.15. Обработка взаимодействия жестов с картой……………………………………………………………… 621

59.15.1. Жесты масштабирования………………………………………………………………………………. 621

59.15.2. Жесты прокрутки/сдвига карты……………………………………………………………………. 622

59.15.3. Жесты наклона карты……………………………………………………………………………………. 622

59.15.4. Жесты поворота карты………………………………………………………………………………….. 622

59.16. Создание маркеров карты……………………………………………………………………………………………. 622

59.17. Управление камерой карты…………………………………………………………………………………………. 624

59.18. Заключение……………………………………………………………………………………………………………………. 625

Глава 60. Создание, тестирование и загрузка пакета Android-приложений 626

60.1. Процесс подготовки к релизу…………………………………………………………………………………………. 626

60.2. Пакеты Android-приложений…………………………………………………………………………………………. 626

60.3. Регистрация аккаунта в консоли разработчика Google Play………………………………………. 627

60.4. Настройка приложения в консоли………………………………………………………………………………… 628

60.5. Включение подписи приложений в Google Play…………………………………………………………… 628

60.6. Создание файла для хранения ключей…………………………………………………………………………. 631

60.7. Создание пакета Android-приложений…………………………………………………………………………. 632

60.8. Создание тестовых APK-файлов……………………………………………………………………………………. 634

60.9. Загрузка пакета приложения в Консоль разработчика Google Play………………………….. 635

60.10. Обзор пакета приложений……………………………………………………………………………………………. 636

60.11. Управление тестерами…………………………………………………………………………………………………. 638

60.12. Развертывание приложения для тестирования………………………………………………………….. 639

60.13. Загрузка новых версий пакета приложений………………………………………………………………. 639

60.14. Анализ файла пакета приложения………………………………………………………………………………. 640

60.15. Заключение……………………………………………………………………………………………………………………. 641

Глава 61. Обзор биллинга в Android-приложениях……………………………….. 642

61.1. Подготовка проекта для покупок внутри приложения………………………………………………… 642

61.2. Создание продуктов и подписок внутри приложения…………………………………………………. 643

61.3. Инициализация BillingClient…………………………………………………………………………………………… 644

61.4. Подключение к библиотеке Google Play Billing…………………………………………………………….. 645

61.5. Запрос доступных продуктов………………………………………………………………………………………… 645

61.6. Запуск процесса покупки……………………………………………………………………………………………….. 646

61.7. Завершение покупки……………………………………………………………………………………………………….. 647

61.8. Запрос предыдущих покупок………………………………………………………………………………………… 648

61.9. Заключение……………………………………………………………………………………………………………………… 649

Глава 62. Руководство по покупкам в приложении Android…………………. 650

62.1. О проекте тестовых покупок в приложении…………………………………………………………………. 650

62.2. Создание проекта InAppPurchase………………………………………………………………………………….. 650

62.3. Добавление библиотек в проект……………………………………………………………………………………. 651

62.4. Добавление приложения в Google Play Store………………………………………………………………… 652

62.5. Создание продукта внутри приложения………………………………………………………………………. 652

62.6. Включение тестировщиков лицензий……………………………………………………………………………. 653

62.7. Создание вспомогательного класса для покупок………………………………………………………… 654

62.8. Добавление потоков StateFlow………………………………………………………………………………………. 655

62.9. Инициализация BillingClient…………………………………………………………………………………………… 655

62.10. Запрос продукта…………………………………………………………………………………………………………… 656

62.11. Обработка обновлений покупок………………………………………………………………………………….. 657

62.12. Запуск процесса покупки…………………………………………………………………………………………….. 658

62.13. Использование продукта……………………………………………………………………………………………… 659

62.14. Восстановление предыдущей покупки……………………………………………………………………….. 659

62.15. Завершение MainActivity……………………………………………………………………………………………… 660

62.16. Тестирование приложения…………………………………………………………………………………………… 662

62.17. Устранение неполадок…………………………………………………………………………………………………. 665

62.18. Заключение……………………………………………………………………………………………………………………. 665

Глава 63. Работа с темами в Compose…………………………………………………… 666

63.1. Material Design 2 и Material Design 3………………………………………………………………………………. 666

63.2. Тематизация Material Design 3……………………………………………………………………………………….. 666

63.3. Заключение……………………………………………………………………………………………………………………… 671

Глава 64. Руководство по тематическому оформлению Material Design 3 672

64.1. Создание проекта ThemeDemo……………………………………………………………………………………… 672

64.2. Проектирование пользовательского интерфейса………………………………………………………… 672

64.3. Создание новой темы……………………………………………………………………………………………………… 675

64.4. Добавление темы в проект……………………………………………………………………………………………… 676

64.5. Включение динамических цветов………………………………………………………………………………….. 676

64.6. Заключение……………………………………………………………………………………………………………………… 678

Глава 65. Обзор на Gradle в Android Studio…………………………………………… 679

65.1. Обзор Gradle…………………………………………………………………………………………………………………….. 679

65.2. Gradle и Android Studio……………………………………………………………………………………………………. 679

65.2.1. Разумные значения по умолчанию…………………………………………………………………… 680

65.2.2. Зависимости………………………………………………………………………………………………………… 680

65.2.3. Варианты сборки……………………………………………………………………………………………….. 680

65.2.4. Записи манифеста………………………………………………………………………………………………. 680

65.2.5. Подписание APK…………………………………………………………………………………………………. 681

65.2.6. Поддержка ProGuard………………………………………………………………………………………….. 681

65.3. Файл сборки Gradle со свойствами и настройками……………………………………………………… 681

65.4. Файл сборки Gradle верхнего уровня……………………………………………………………………………. 682

65.5. Файлы сборки Gradle на уровне модуля……………………………………………………………………….. 683

65.6. Настройка параметров подписи в файле сборки…………………………………………………………. 686

65.7. Запуск задач Gradle из командной строки……………………………………………………………………. 687

65.8. Заключение……………………………………………………………………………………………………………………… 687

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

“Паттерны коммуникации: руководство для ИТ-разработчиков и архитекторов”

Паттерны коммуникации: руководство для ИТ-разработчиков и архитекторов

Книга  представляет собой практическое руководство по эффективной коммуникации для  ИТ-специалистов, которым необходимо доносить свои идеи до целевой аудитории ясно и понятно.  Она охватывает ключевые аспекты визуальной, письменной, устной и невербальной коммуникаций, а также особенности удаленной работы. Рассмотрены основы создания наглядных диаграмм и документации,  включая работу с цветом и композицией, методы последовательной подачи информации  и повышения  ее  доступности, чтобы адаптировать визуальные материалы для разных аудиторий. Описана работа с языком, структурирование текста, применение языка тела и использование культурных различий с целью убеждения аудитории. Предложены подходы к организации и передаче знаний в командах, включая принципы DRY (Don’t Repeat Yourself). Рассмотрены  современные инструменты для управления знаниями, помогающие сделать информацию доступной и понятной для всех участников проекта. Рассмотрены средства для эффективной работы в распределённых командах, включая синхронные и асинхронные методы коммуникации и  управления временем.

Для разработчиков,  архитекторов и широкого круга ИТ-специалистов

Животное на обложке — коричный зелёный голубь (Treron fulvicollis). Эту редкую птицу можно встретить в субтропических и тропических мангровых лесах, болотах и влажных кустарниках в Индонезии, Малайзии, Мьянме, Сингапуре и Таиланде. Вы также можете увидеть их в сельских садах.

Отличной идеи или удачного дизайна недостаточно для успеха.

Чтобы заручиться поддержкой заинтересованных лиц и вовлечь команду в совместную работу, важно четко и убедительно донести своё видение.

В этой практической книге эксперт в области архитектуры приложений объясняет как:

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

Что внутри?

  • Реальные кейсы и готовые шаблоны
  • Гибкие методики адаптации сообщений для разных аудиторий
  • Инструменты для ясной и понятной передачи сложных технических концепций

Это экспертное руководство, которое раскрывает сложность языка челове-ческого взаимодействия. Обязательно к прочтению!

Марк Ричардс, программный архитектор, основатель сайта DeveloperToArchitect.com

Их могут называть гибкими навыка-ми, но их нелегко освоить, поскольку им так редко учат. Книга восполняет этот пробел.

Ребекка Парсонс, главный технический директор ИТ-компании Thoughtworks

Эта книга научит вас:

  • Готовить диаграммы и документацию с учетом аудитории, целей сообщения и стадии проекта
  • Создавать материалы, понятные для специалистов разного уровня и людей с ограниченными возможностями
  • Освоить разные форматы общения: визуальный, письменный, устный и невербальный
  • Эффективно работать с распределенными командами при проектировании и документировании ИТ-решений
  • Использовать готовые паттерны  коммуникации в реальных разработках

Книгу “Паттерны коммуникации: руководство для ИТ-разработчиков и архитекторов” можно купить в нашем интенет-магазине.

Отзывы о книге……………………………………………………………………………………… 11

Введение………………………………………………………………………………………………… 14

Зачем я написала эту книгу………………………………………………………………………………………………………. 15

Кому предназначена эта книга………………………………………………………………………………………………… 16

Как читать эту книгу…………………………………………………………………………………………………………………. 17

Изображения и цвета…………………………………………………………………………………………………………………. 17

Программные средства……………………………………………………………………………………………………………… 17

Полиглот Медиа………………………………………………………………………………………………………………………… 18

Условные обозначения……………………………………………………………………………………………………………… 18

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

Онлайн-обучение в O’Reilly……………………………………………………………………………………………………….. 19

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

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

Часть I. Визуальная коммуникация………………………………………. 23

Глава 1. Основы коммуникации……………………………………………………………. 25

Знайте вашу аудиторию……………………………………………………………………………………………………………. 25

Смешение уровней абстракции………………………………………………………………………………………………… 29

Согласованность репрезентации……………………………………………………………………………………………… 33

Итоги…………………………………………………………………………………………………………………………………………… 37

Глава 2. Устранение беспорядка……………………………………………………………. 38

Цветовая перегрузка………………………………………………………………………………………………………………….. 38

Прямоугольники в прямоугольниках в прямоугольниках……………………………………………………… 40

Паутина взаимосвязей……………………………………………………………………………………………………………….. 42

Баланс текстовой информации…………………………………………………………………………………………………. 46

Итоги…………………………………………………………………………………………………………………………………………… 48

Глава 3. Доступность……………………………………………………………………………… 49

Зависимость от цвета при коммуникации……………………………………………………………………………….. 49

Использование легенды…………………………………………………………………………………………………………….. 54

Подходящие подписи………………………………………………………………………………………………………………… 57

Итоги…………………………………………………………………………………………………………………………………………… 59

Глава 4. Повествование…………………………………………………………………………. 60

Все начинается с общей картины…………………………………………………………………………………………….. 60

Соответствие диаграммы потоков ожиданиям……………………………………………………………………….. 63

Ясные взаимосвязи…………………………………………………………………………………………………………………….. 66

Итоги…………………………………………………………………………………………………………………………………………… 69

Глава 5. Нотация……………………………………………………………………………………. 70

Использование эмблем для передачи смысла…………………………………………………………………………. 70

UML ради UML………………………………………………………………………………………………………………………….. 72

Смешение поведенческого и структурного типов…………………………………………………………………… 76

Несоответствие ожиданиям………………………………………………………………………………………………………. 77

Итоги…………………………………………………………………………………………………………………………………………… 80

Глава 6. Композиция……………………………………………………………………………… 81

Неразборчивые диаграммы………………………………………………………………………………………………………. 81

Коммуникация через стили……………………………………………………………………………………………………….. 86

Запутывающая композиция………………………………………………………………………………………………………. 88

Создание визуального баланса………………………………………………………………………………………………… 93

Итоги…………………………………………………………………………………………………………………………………………… 96

Часть II. Мультимодальность…………………………………………………… 97

Глава 7. Письменная коммуникация……………………………………………………… 99

Простой язык………………………………………………………………………………………………………………………………. 99

Проблема акронимов………………………………………………………………………………………………………………. 101

Структура текстового документа…………………………………………………………………………………………… 103

Синтаксис технического документа………………………………………………………………………………………. 106

Сильные глаголы………………………………………………………………………………………………………….. 106

Короткие предложения………………………………………………………………………………………………… 107

Значение абзацев………………………………………………………………………………………………………….. 107

Единство терминологии……………………………………………………………………………………………….. 108

Внимание к аудитории…………………………………………………………………………………………………. 109

Итоги…………………………………………………………………………………………………………………………………………. 110

Глава 8. Вербальная и невербальная коммуникация……………………………. 111

Шифрование сообщений при коммуникации………………………………………………………………………… 111

Пророчество принятия…………………………………………………………………………………………………. 111

Посвящайте все свое внимание участникам коммуникации…………………………………….. 112

Используйте язык тела и жесты…………………………………………………………………………………… 113

Расшифровка сообщений………………………………………………………………………………………………………… 115

Боритесь с предвзятостью……………………………………………………………………………………………. 115

Предвзятость подтверждения……………………………………………………………………………… 116

Знание задним числом…………………………………………………………………………………………. 117

Групповое мышление…………………………………………………………………………………………… 117

Сосредоточьтесь на настоящем………………………………………………………………………………….. 118

Будьте в курсе культурных различий…………………………………………………………………………. 118

Влияние и убеждение………………………………………………………………………………………………………………. 119

Итоги…………………………………………………………………………………………………………………………………………. 123

Глава 9. Классификация риторики Аристотеля……………………………………. 124

Этос…………………………………………………………………………………………………………………………………………… 124

Расскажите о своих достижениях……………………………………………………………………………….. 125

Пользуйтесь надежными источниками………………………………………………………………………. 126

Будьте открыты…………………………………………………………………………………………………………….. 127

Продемонстрируйте ваши знания……………………………………………………………………………….. 129

Пафос………………………………………………………………………………………………………………………………………… 130

Расскажите историю…………………………………………………………………………………………………….. 130

Говорите от чистого сердца………………………………………………………………………………………… 133

Используйте живой язык и яркие образы……………………………………………………………………. 134

Логос…………………………………………………………………………………………………………………………………………. 135

Используйте данные и факты………………………………………………………………………………………. 135

Формируйте логические связи…………………………………………………………………………………….. 136

Рассуждайте и аргументируйте………………………………………………………………………………….. 137

Итоги…………………………………………………………………………………………………………………………………………. 139

Часть III. Передача знаний………………………………………………………… 141

Глава 10. Принципы управления знаниями…………………………………………. 143

Продукты вместо проектов……………………………………………………………………………………………………… 143

Проектное мышление…………………………………………………………………………………………………… 143

Продуктовое мышление……………………………………………………………………………………………….. 144

Абстракции вместо текста………………………………………………………………………………………………………. 147

Списки……………………………………………………………………………………………………………………………. 147

Таблицы………………………………………………………………………………………………………………………… 148

Визуальные абстракции………………………………………………………………………………………………. 149

Облака слов…………………………………………………………………………………………………………………… 150

Схемы, графики и диаграммы……………………………………………………………………………………… 151

Другие виды абстракций……………………………………………………………………………………………… 152

Документация на основе перспективы…………………………………………………………………………………… 152

Принцип DRY для перспектив……………………………………………………………………………………… 153

Фрактальные перспективы………………………………………………………………………………………….. 154

Реализация перспективы……………………………………………………………………………………………… 155

Итоги…………………………………………………………………………………………………………………………………………. 157

Глава 11. Знания и люди………………………………………………………………………. 158

Постоянная обратная связь на ранних этапах……………………………………………………………………… 158

Разделение нагрузки………………………………………………………………………………………………………………… 162

Свободно распространяемые продукты…………………………………………………………………….. 162

Доступность………………………………………………………………………………………………………………….. 163

Совместная работа………………………………………………………………………………………………………. 165

Распределение обязанностей и ответственности………………………………………………………. 166

Другие приемы……………………………………………………………………………………………………………… 166

Архитектура “точно в срок”……………………………………………………………………………………………………. 167

Итоги…………………………………………………………………………………………………………………………………………. 170

Глава 12. Эффективные практики……………………………………………………….. 171

Документ ADR………………………………………………………………………………………………………………………….. 171

Структура ADR…………………………………………………………………………………………………………….. 172

Заголовок и имя файла………………………………………………………………………………………… 173

Статус……………………………………………………………………………………………………………………. 173

Контекст………………………………………………………………………………………………………………… 174

Критерий оценивания………………………………………………………………………………………….. 175

Варианты………………………………………………………………………………………………………………. 175

Решение…………………………………………………………………………………………………………………. 175

Результаты……………………………………………………………………………………………………………. 175

Обсуждение…………………………………………………………………………………………………………… 176

Содержимое ADR…………………………………………………………………………………………………………. 176

Как хранить ADR………………………………………………………………………………………………………….. 180

Культура ADR………………………………………………………………………………………………………………. 181

Характеристики архитектуры………………………………………………………………………………………………… 184

Документация в виде программного кода……………………………………………………………………………… 187

Техническая документация…………………………………………………………………………………………. 188

Автоматическое создание документации…………………………………………………………………… 190

Другая документация…………………………………………………………………………………………………… 191

Итоги…………………………………………………………………………………………………………………………………………. 194

Часть IV. Дистанционная коммуникация…………………………. 195

Глава 13. Фактор времени при дистанционном общении…………………….. 197

Синхронизация времени………………………………………………………………………………………………………….. 197

Часовые пояса………………………………………………………………………………………………………………. 198

Эмпатия и компромиссы………………………………………………………………………………………………. 201

Сменный график работы……………………………………………………………………………………………… 202

Соблюдение рабочих паттернов……………………………………………………………………………………………. 204

Уведомление о доступности………………………………………………………………………………………… 204

Несовпадение часов работы при частичной занятости……………………………………………. 205

Планирование нерабочих дней…………………………………………………………………………………… 205

Учет местоположения и культурных особенностей………………………………………………….. 207

Оценка реального трудового потенциала………………………………………………………………….. 208

Повышение работоспособности и продуктивности……………………………………………………………… 209

Контроль уведомлений………………………………………………………………………………………………… 209

Автоматизация задач…………………………………………………………………………………………………… 210

Соблюдение ритмов других сотрудников………………………………………………………………….. 211

Составление расписания на основе биоритмов………………………………………………………… 211

Итоги…………………………………………………………………………………………………………………………………………. 213

Глава 14. Принципы дистанционного общения…………………………………… 214

Проведение собраний……………………………………………………………………………………………………………… 214

Синхронная или асинхронная коммуникация?…………………………………………………………. 214

Повышение эффективности собраний………………………………………………………………………… 216

Асинхронная коммуникация…………………………………………………………………………………………………… 221

Преимущества асинхронного общения………………………………………………………………………. 221

Недостатки асинхронного общения…………………………………………………………………………… 221

Направленность коммуникации тоже важна…………………………………………………………….. 222

Способы асинхронного общения………………………………………………………………………………… 224

Способы улучшения асинхронного общения……………………………………………………………. 226

Ориентация на удаленную работу………………………………………………………………………………………… 228

Ориентированный на удаленную работу или располагающий
к удаленной работе?…………………………………………………………………………………………………….. 228

Преимущества ориентации на удаленную работу……………………………………………………. 230

Развитие модели с ориентацией на удаленную работу……………………………………………. 232

Итоги…………………………………………………………………………………………………………………………………………. 234

Глава 15. Методы дистанционного общения………………………………………… 235

Симметричная электронная почта…………………………………………………………………………………………. 235

Причины использования электронной почты……………………………………………………………. 236

Правила использования электронной почты…………………………………………………………….. 236

Понятность электронного письма……………………………………………………………………………….. 237

Советы при работе с электронной почтой…………………………………………………………………. 238

Онлайн-презентации……………………………………………………………………………………………………………….. 239

Вовлеченность аудитории…………………………………………………………………………………………… 239

Содержание презентации…………………………………………………………………………………………….. 241

Демонстрация экрана…………………………………………………………………………………………………… 242

Инструменты для удаленной работы и управления…………………………………………………………….. 243

Выбор приемов……………………………………………………………………………………………………………… 243

Сервисы для удаленной работы…………………………………………………………………………………. 245

Проблема увеличения объема данных……………………………………………………………………….. 247

Безопасность…………………………………………………………………………………………………………………. 249

Эффективность инструментов……………………………………………………………………………………… 249

Управление ПО……………………………………………………………………………………………………………… 250

Итоги…………………………………………………………………………………………………………………………………………. 256

Эпилог………………………………………………………………………………………………….. 257

Приложение. Шаблоны ADR………………………………………………………………… 258

Структура ADR………………………………………………………………………………………………………………………… 258

Идентификатор и заголовок: заявление о принятом решении………………………………….. 258

Варианты ADR…………………………………………………………………………………………………………………………. 259

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

Об авторе……………………………………………………………………………………………… 263

Об изображении на обложке………………………………………………………………… 263

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

Встречайте: “Изучаем Data Science: обработка, исследование, визуализация и моделирование данных с помощью Python”

Изучаем Data Science: обработка, исследование, визуализация и моделирование данных с помощью Python

Практическое руководство по анализу данных, раскрывающее полный цикл работы с информацией: от сбора и обработки до построения моделей машинного обучения. Рассмотрена работа с инструментами pandas и SQL, методы выявления закономерностей и очистки данных. Описаны различные источники информации, включая текстовые, бинарные и веб-данные. Подробно изложены статистические методы: доверительные интервалы, проверка гипотез, конструирование признаков. Приведены практические примеры на языке Python из разных областей: анализ транспортных систем, экологические исследования, ветеринарная аналити-ка. Заключительные разделы посвящены логистической регрессии и оптимизации моделей с применением к задачам классификации текстов.

Для начинающих специалистов в области Data Science , аналитиков данных и широкого круга ИТ-специалистов

Именно такой книги нам не хватало, когда мы впервые ввели термин «data scientist» для описания своей профессии. Если вы планируете заниматься наукой о данных, инженерией данных, искусственным интеллектом или машинным обучением, то вам непременно следует начать с нее.
 Ди Джей Патил, PhD, первый в США ведущий data scientist

Как начинающий специалист в области науки о данных (Data Science), вы понимаете, почему в процессе принятия ключевых решений организации полагаются на данные – будь то компании, занимающиеся разработкой веб-сайтов, местные администрации, работающие над повышением качества муниципальных услуг, или научно-исследовательские институты, борющиеся с распространением заболеваний.

Для этого необходимо освоить навыки преобразования беспорядочных данных в полезную информацию. Это называется жизненным циклом Data Science, который включает в себя процесс сбора, обработки и анализа данных наряду с формированием выводов на их основе.

Перед вами первая книга, в которой рассматриваются базовые навыки программирования и статистики, охватывающие весь жизненный цикл. Она адресована всем желающим работать в области Data Science или любой другой смежной области, а также аналитикам данных, преодолевающим разрыв между техническими и нетехническими областями. Если вы обладаете базовыми знаниями программирования на Python, вы научитесь работать с данными при помощи стандартных инструментов вроде pandas.

Прочитав книгу, вы сможете:

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

Книгу “Изучаем Data Science: обработка, исследование, визуализация и моделирование данных с помощью Python” можно купить в нашем интенет-магазине.

Отзывы на книгу…………………………………………………………………………………… 13

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

Требуемые базовые знания……………………………………………………………………………………………………….. 15

Структура книги………………………………………………………………………………………………………………………… 15

Принятые условные обозначения…………………………………………………………………………………………….. 16

Примеры применения кода……………………………………………………………………………………………………….. 16

Онлайн-обучение O’Reilly…………………………………………………………………………………………………………. 17

Наши контакты………………………………………………………………………………………………………………………….. 17

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

Часть I. Жизненный цикл Data Science………………………………….. 19

Глава 1. Жизненный цикл Data Science………………………………………………….. 21

Этапы жизненного цикла………………………………………………………………………………………………………….. 21

Примеры жизненного цикла……………………………………………………………………………………………………… 24

Краткие выводы…………………………………………………………………………………………………………………………. 25

Глава 2. Постановка вопроса и охват данных……………………………………….. 26

Большие данные и новые возможности…………………………………………………………………………………… 26

Пример: Google Flu Trends……………………………………………………………………………………………… 27

Целевая совокупность, фрейм доступных данных, выборка…………………………………………………. 29

Пример: что побуждает к активности участников онлайн-сообщества?………………….. 31

Пример: кто победит на выборах?………………………………………………………………………………… 31

Пример: связь экологических угроз со здоровьем человека……………………………………….. 32

Инструменты и протоколы……………………………………………………………………………………………………….. 34

Измерение параметров природных явлений……………………………………………………………………………. 34

Пример: определение содержания CO2 в воздухе……………………………………………………….. 35

Точность……………………………………………………………………………………………………………………………………… 36

Виды смещения……………………………………………………………………………………………………………….. 38

Виды дисперсии……………………………………………………………………………………………………………… 40

Краткие выводы…………………………………………………………………………………………………………………………. 41

Глава 3. Структура данных и моделирование………………………………………… 43

Урновая модель………………………………………………………………………………………………………………………….. 44

Схемы выборки……………………………………………………………………………………………………………….. 46

Выборочное распределение статистики………………………………………………………………………. 48

Моделирование выборочного распределения…………………………………………………………….. 49

Моделирование при помощи гипергеометрического распределения……………………….. 50

Пример: моделирование смещения и дисперсии опросов избирателей……………………………….. 52

Урновая модель опросов в Пенсильвании……………………………………………………………………. 53

Урновая модель со смещением……………………………………………………………………………………… 55

Проведение более масштабных опросов……………………………………………………………………… 56

Пример: моделирование рандомизированного испытания вакцины……………………………………. 58

Охват……………………………………………………………………………………………………………………………….. 58

Урновая модель случайного распределения……………………………………………………………….. 60

Пример: измерение качества воздуха………………………………………………………………………………………. 61

Краткие выводы…………………………………………………………………………………………………………………………. 64

Глава 4. Моделирование при помощи сводной статистики……………………. 66

Константная модель………………………………………………………………………………………………………………….. 66

Минимизация потерь…………………………………………………………………………………………………………………. 68

Средняя абсолютная ошибка………………………………………………………………………………………… 69

Среднеквадратичная ошибка………………………………………………………………………………………… 72

Выбор функции потерь…………………………………………………………………………………………………… 74

Краткие выводы…………………………………………………………………………………………………………………………. 74

Глава 5. Пример из практики: почему мой автобус всегда опаздывает?… 76

Постановка вопроса и охват данных………………………………………………………………………………………. 76

Первичная обработка данных………………………………………………………………………………………………….. 77

Изучение расписания автобусов………………………………………………………………………………………………. 80

Моделирование времени ожидания…………………………………………………………………………………………. 83

Краткие выводы…………………………………………………………………………………………………………………………. 87

Часть II. Табличные данные………………………………………………………. 89

Глава 6. Работа с датафреймами с помощью pandas………………………………. 91

Подмножество……………………………………………………………………………………………………………………………. 92

Охват данных и постановка вопроса……………………………………………………………………………. 92

Датафрейм и индекс……………………………………………………………………………………………………….. 93

Срез………………………………………………………………………………………………………………………………….. 94

Фильтрация строк…………………………………………………………………………………………………………… 98

Пример: когда стало популярным имя Luna?……………………………………………………………. 100

Агрегирование………………………………………………………………………………………………………………………….. 102

Агрегирование и базовая группировка………………………………………………………………………. 103

Пример: использование функции .value_counts()………………………………………………. 104

Группировка по нескольким столбцам………………………………………………………………………. 105

Пользовательские агрегатные функции……………………………………………………………………… 106

Поворот…………………………………………………………………………………………………………………………. 109

Соединение………………………………………………………………………………………………………………………………. 110

Внутренние соединения……………………………………………………………………………………………….. 111

Левые, правые и внешние соединения………………………………………………………………………… 113

Пример: популярность категорий имен из статьи New York Times…………………………… 114

Преобразование……………………………………………………………………………………………………………………….. 116

Метод apply…………………………………………………………………………………………………………………… 117

Пример: популярность имен на букву “L”………………………………………………………………….. 118

Цена метода apply………………………………………………………………………………………………………… 120

Отличие датафрейма от других представлений данных……………………………………………………… 121

Датафрейм и электронная таблица…………………………………………………………………………….. 121

Датафрейм и матрица………………………………………………………………………………………………….. 121

Датафрейм и отношение………………………………………………………………………………………………. 122

Краткие выводы……………………………………………………………………………………………………………………….. 123

Глава 7. Работа с отношениями с помощью SQL………………………………….. 124

Подмножество………………………………………………………………………………………………………………………….. 124

Основы SQL: SELECT и FROM…………………………………………………………………………………….. 125

Что такое отношение?………………………………………………………………………………………………….. 126

Срез………………………………………………………………………………………………………………………………… 126

Фильтрация строк…………………………………………………………………………………………………………. 128

Пример: когда стало популярным имя Luna?……………………………………………………………. 129

Агрегирование………………………………………………………………………………………………………………………….. 131

Базовая группировка и агрегирование с помощью GROUP BY………………………………… 131

Группировка по нескольким столбцам………………………………………………………………………. 132

Другие агрегатные функции………………………………………………………………………………………… 133

Соединение………………………………………………………………………………………………………………………………. 134

Внутренние соединения……………………………………………………………………………………………….. 135

Левые и правые соединения………………………………………………………………………………………… 136

Пример: популярность категорий имен из статьи NYT……………………………………………… 137

Преобразование и обобщенные табличные выражения………………………………………………………. 138

Функции SQL…………………………………………………………………………………………………………………. 139

Многошаговые запросы с использованием оператора WITH…………………………………… 141

Пример: популярность имен на букву “L”………………………………………………………………….. 142

Краткие выводы……………………………………………………………………………………………………………………….. 142

Часть III. Осмысление данных……………………………………………….. 145

Глава 8. Первичная обработка файлов…………………………………………………. 147

Примеры источников данных…………………………………………………………………………………………………. 148

Исследование DAWN……………………………………………………………………………………………………. 148

Безопасность пищевых продуктов в ресторанах Сан-Франциско…………………………… 149

Форматы файлов……………………………………………………………………………………………………………………… 150

Формат с разделителями……………………………………………………………………………………………… 150

Формат с фиксированной шириной…………………………………………………………………………….. 152

Иерархические форматы……………………………………………………………………………………………… 153

Свободно форматированный текст…………………………………………………………………………….. 153

Кодировка файла…………………………………………………………………………………………………………………….. 154

Размер файла……………………………………………………………………………………………………………………………. 156

Командная оболочка и инструменты командной строки…………………………………………………….. 159

Форма и гранулярность таблицы…………………………………………………………………………………………… 163

Гранулярность данных о проверках и нарушениях в ресторанах………………………….. 164

Форма и гранулярность исследования DAWN…………………………………………………………… 166

Краткие выводы……………………………………………………………………………………………………………………….. 168

Глава 9. Первичная обработка датафрейма………………………………………….. 170

Пример: первичная обработка результатов измерений содержания CO2
в обсерватории Мауна-Лоа……………………………………………………………………………………………………. 171

Проверка качества……………………………………………………………………………………………………….. 174

Обработка недостающих данных………………………………………………………………………………. 176

Изменение формы таблицы данных……………………………………………………………………………. 177

Проверка качества данных…………………………………………………………………………………………………….. 178

Качество в плане охвата……………………………………………………………………………………………… 179

Качество измерений и регистрируемых значений…………………………………………………….. 179

Качество в плане связанных признаков……………………………………………………………………… 180

Проверка качества на пригодность к исследованию………………………………………………… 181

Выяснение необходимости в исправлении данных…………………………………………………… 182

Пропущенные значения и записи…………………………………………………………………………………………… 183

Преобразования и временне метки………………………………………………………………………………………. 185

Преобразование временнх меток……………………………………………………………………………… 186

Конвейеризация в преобразованиях…………………………………………………………………………… 188

Изменение структуры………………………………………………………………………………………………………………. 190

Пример: первичная обработка данных о нарушениях правил безопасности в ресторанах 192

Сужение фокуса……………………………………………………………………………………………………………. 193

Агрегирование данных о нарушениях……………………………………………………………………….. 194

Извлечение информации из описания нарушений…………………………………………………….. 196

Краткие выводы……………………………………………………………………………………………………………………….. 199

Глава 10. Разведочный анализ данных………………………………………………… 201

Типы признаков данных………………………………………………………………………………………………………….. 202

Пример: породы собак…………………………………………………………………………………………………. 204

Преобразование качественных признаков…………………………………………………………………. 210

Переразметка категорий……………………………………………………………………………………… 210

Сворачивание категорий…………………………………………………………………………………….. 211

Преобразование количественных значений в порядковые………………………………. 212

Роль типов признаков…………………………………………………………………………………………………… 213

На что обратить внимание в распределении………………………………………………………………………… 214

Что необходимо выяснить во взаимосвязи…………………………………………………………………………….. 218

Два количественных признака……………………………………………………………………………………. 218

Один качественный и один количественный признак……………………………………………….. 219

Два качественных признака………………………………………………………………………………………… 221

Сравнения в многомерных системах……………………………………………………………………………………… 223

Руководящие принципы разведочного анализа……………………………………………………………………. 226

Пример: цены на жилую недвижимость………………………………………………………………………………… 227

Изучение цен…………………………………………………………………………………………………………………. 228

Дальнейшие шаги…………………………………………………………………………………………………………. 230

Изучение прочих признаков………………………………………………………………………………………… 231

Углубленный анализ взаимосвязей…………………………………………………………………………….. 234

Фиксация местоположения………………………………………………………………………………………….. 236

Результаты EDA……………………………………………………………………………………………………………. 238

Краткие выводы……………………………………………………………………………………………………………………….. 239

Глава 11. Визуализация данных…………………………………………………………… 240

Выбор масштаба для выяснения структуры…………………………………………………………………………. 240

Заполнение области данных……………………………………………………………………………………….. 241

Учет нулевого значения……………………………………………………………………………………………….. 242

Выяснение формы данных с помощью преобразований………………………………………….. 244

Кренение для расшифровки взаимосвязей…………………………………………………………………. 246

Выявление взаимосвязей с помощью спрямления……………………………………………………… 247

Сглаживание и агрегирование данных………………………………………………………………………………….. 249

Методы сглаживания для определения формы данных……………………………………………. 250

Методы сглаживания для выявления взаимосвязей и тенденций…………………………….. 252

Настройка методов сглаживания……………………………………………………………………………….. 254

Сведение распределений к квантилям………………………………………………………………………… 255

Случаи, когда сглаживание нежелательно………………………………………………………………… 257

Упрощение значимых сравнений…………………………………………………………………………………………… 259

Подчеркивание важного различия……………………………………………………………………………… 259

Упорядочивание групп………………………………………………………………………………………………… 261

Отказ от стекинга………………………………………………………………………………………………………….. 263

Выбор цветовой палитры…………………………………………………………………………………………….. 265

Принципы проведения сравнений на графиках…………………………………………………………. 266

Учет особенностей исходных данных при визуализации……………………………………………………. 267

Данные, собранные с течением времени……………………………………………………………………. 268

Исследования по данным наблюдений………………………………………………………………………. 269

Неравномерная выборка……………………………………………………………………………………………… 271

Географические данные………………………………………………………………………………………………. 272

Добавление контекста…………………………………………………………………………………………………………….. 273

Пример: результаты 100-метрового спринта…………………………………………………………….. 273

Создание графиков с помощью plotly……………………………………………………………………………………. 275

Объекты Figure и Trace………………………………………………………………………………………………… 276

Изменение макета…………………………………………………………………………………………………………. 277

Функции построения графиков……………………………………………………………………………………. 279

Аннотации к изображению………………………………………………………………………………………….. 281

Другие инструменты визуализации……………………………………………………………………………………….. 282

Matplotlib………………………………………………………………………………………………………………………. 282

Грамматика графики……………………………………………………………………………………………………. 282

Краткие выводы……………………………………………………………………………………………………………………….. 283

Глава 12. Тематическое исследование: проверка точности показателей качества воздуха         285

Постановка вопроса, структура и охват данных…………………………………………………………………. 286

Поиск близко расположенных датчиков……………………………………………………………………………….. 288

Первичная обработка списка локаций AQS………………………………………………………………. 288

Первичная обработка списка локаций PurpleAir……………………………………………………….. 291

Сопоставление датчиков AQS и PurpleAir………………………………………………………………….. 292

Первичная обработка и очистка данных датчиков AQS……………………………………………………… 294

Проверка гранулярности……………………………………………………………………………………………… 295

Удаление ненужных столбцов…………………………………………………………………………………….. 296

Проверка достоверности дат………………………………………………………………………………………. 297

Проверка качества показателей PM2.5………………………………………………………………………. 298

Первичная обработка показаний датчиков PurpleAir…………………………………………………………… 299

Проверка гранулярности……………………………………………………………………………………………… 300

Визуализация временнх меток…………………………………………………………………………. 302

Проверка частоты выборки…………………………………………………………………………………. 303

Обработка пропущенных значений……………………………………………………………………………. 305

Разведочный анализ показаний PurpleAir и AQS…………………………………………………………………… 306

Создание модели для корректировки показаний PurpleAir………………………………………………….. 312

Краткие выводы……………………………………………………………………………………………………………………….. 314

Часть IV. Другие источники данных…………………………………….. 317

Глава 13. Операции с текстом………………………………………………………………. 319

Примеры текстов и заданий……………………………………………………………………………………………………. 319

Преобразование текста в стандартный формат………………………………………………………… 319

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

Преобразование текста в признаки…………………………………………………………………………….. 320

Анализ текста……………………………………………………………………………………………………………….. 321

Манипуляции со строками……………………………………………………………………………………………………… 322

Преобразование текста в стандартный формат с помощью строковых методов Python           322

Строковые методы в pandas………………………………………………………………………………………… 323

Извлечение фрагментов текста с помощью разделения строк…………………………………. 324

Регулярные выражения……………………………………………………………………………………………………………. 325

Конкатенация литералов…………………………………………………………………………………………….. 325

Классы символов………………………………………………………………………………………………….. 326

Символ подстановки……………………………………………………………………………………………. 327

Инвертированные классы символов…………………………………………………………………… 327

Сокращения классов символов…………………………………………………………………………… 327

Анкоры и границы………………………………………………………………………………………………… 327

Исключение метасимволов………………………………………………………………………………….. 328

Квантификаторы…………………………………………………………………………………………………………… 328

Создание признаков при помощи чередования и группировки……………………………….. 330

Справочные таблицы…………………………………………………………………………………………………… 331

Анализ текста…………………………………………………………………………………………………………………………… 333

Краткие выводы……………………………………………………………………………………………………………………….. 338

Глава 14. Обмен данными……………………………………………………………………. 339

Формат NetCDF………………………………………………………………………………………………………………………… 339

Формат JSON……………………………………………………………………………………………………………………………. 344

HTTP…………………………………………………………………………………………………………………………………………. 348

REST………………………………………………………………………………………………………………………………………….. 352

XML, HTML, XPath………………………………………………………………………………………………………………….. 356

Пример: веб-скрапинг результатов забегов из Википедии……………………………………….. 359

XPath……………………………………………………………………………………………………………………………… 361

Пример: доступ к курсам валют ЕЦБ…………………………………………………………………………. 363

Краткие выводы……………………………………………………………………………………………………………………….. 366

Часть V. Линейное моделирование………………………………………. 369

Глава 15. Линейные модели…………………………………………………………………. 371

Простая линейная модель……………………………………………………………………………………………………….. 372

Пример: простая линейная модель оценки качества воздуха……………………………………………… 375

Интерпретация линейных моделей…………………………………………………………………………….. 377

Оценка качества подгонки…………………………………………………………………………………………… 378

Подгонка простой линейной модели……………………………………………………………………………………… 379

Модель множественной линейной регрессии……………………………………………………………………….. 381

Подбор параметров модели множественной линейной регрессии……………………………………… 386

Пример: где находится страна возможностей?…………………………………………………………………….. 389

Объяснение восходящей мобильности на основе времени в пути на работу…………. 391

Связь восходящей мобильности с использованием нескольких переменных…………. 393

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

Конструирование признаков для категориальных измерений……………………………………………. 401

Краткие выводы……………………………………………………………………………………………………………………….. 408

Глава 16. Выбор модели……………………………………………………………………….. 410

Переобучение…………………………………………………………………………………………………………………………… 411

Пример: энергопотребление………………………………………………………………………………………… 411

Метод train_test_split………………………………………………………………………………………………………………. 416

Перекрестная проверка…………………………………………………………………………………………………………… 420

Регуляризация………………………………………………………………………………………………………………………….. 425

Смещение и дисперсия модели……………………………………………………………………………………………….. 426

Краткие выводы……………………………………………………………………………………………………………………….. 429

Глава 17. Теория логического вывода и прогнозирования…………………… 431

Распределения: популяционное, эмпирическое, выборочное……………………………………………… 431

Принципы проверки гипотез…………………………………………………………………………………………………… 433

Пример: ранговый критерий сравнения продуктивности соавторов Википедии…… 435

Пример: проверка эффективности вакцины с помощью пропорций………………………… 439

Бутстрап-процедура построения выводов……………………………………………………………………………. 441

Доверительный интервал………………………………………………………………………………………………………… 446

Интервал прогнозирования…………………………………………………………………………………………………….. 449

Пример: прогнозирование опоздания автобуса………………………………………………………… 449

Пример: прогнозирование размера краба………………………………………………………………….. 450

Пример: прогнозирование прироста краба……………………………………………………………….. 451

Вероятность выводов и прогнозов…………………………………………………………………………………………. 454

Формализация теории для статистик средних рангов………………………………………………. 454

Общие свойства случайных величин………………………………………………………………………….. 457

Вероятность в основе интервалов и тестирования……………………………………………………. 459

Вероятность в основе выбора модели………………………………………………………………………… 462

Краткие выводы……………………………………………………………………………………………………………………….. 464

Глава 18. Тематическое исследование: как взвесить осла……………………. 466

Постановка вопроса и охват данных…………………………………………………………………………………….. 466

Первичная обработка и преобразование данных………………………………………………………………… 467

Разведочный анализ данных………………………………………………………………………………………………….. 472

Моделирование веса осла………………………………………………………………………………………………………. 475

Функция потерь при назначении анестетиков…………………………………………………………… 475

Построение простой линейной модели………………………………………………………………………. 476

Подгонка множественной линейной модели……………………………………………………………… 478

Добавление в модель качественных признаков…………………………………………………………. 479

Оценка модели………………………………………………………………………………………………………………. 482

Краткие выводы……………………………………………………………………………………………………………………….. 484

Часть VI. Классификация………………………………………………………….. 487

Глава 19. Классификация…………………………………………………………………….. 489

Пример: поваленные ураганом деревья………………………………………………………………………………… 489

Моделирование и классификация………………………………………………………………………………………….. 492

Константная модель…………………………………………………………………………………………………….. 492

Исследование взаимосвязи между буреломом и размером деревьев………………………. 493

Моделирование долей (и вероятностей)……………………………………………………………………………….. 495

Логистическая модель………………………………………………………………………………………………….. 496

Логарифм отношения шансов……………………………………………………………………………………… 497

Применение логистической кривой…………………………………………………………………………….. 498

Функция потерь для логистической модели………………………………………………………………………….. 499

От вероятностей к классификации…………………………………………………………………………………………. 502

Матрица несоответствий…………………………………………………………………………………………….. 504

Точность и полнота……………………………………………………………………………………………………… 505

Краткие выводы……………………………………………………………………………………………………………………….. 508

Глава 20. Численная оптимизация……………………………………………………….. 509

Основы градиентного спуска………………………………………………………………………………………………….. 510

Минимизация потери Хубера…………………………………………………………………………………………………. 512

Выпуклые и дифференцируемые функции потерь………………………………………………………………… 514

Варианты градиентного спуска……………………………………………………………………………………………… 515

Стохастический градиентный спуск…………………………………………………………………………… 516

Мини-пакетный градиентный спуск…………………………………………………………………………… 517

Метод Ньютона……………………………………………………………………………………………………………. 517

Краткие выводы……………………………………………………………………………………………………………………….. 518

Глава 21. Тематическое исследование: распознавание
фейковых новостей………………………………………………………………………………. 520

Уточнение вопроса и выяснение охвата данных………………………………………………………………….. 521

Получение и “выпас” данных…………………………………………………………………………………………………. 522

Разведочный анализ данных………………………………………………………………………………………………….. 526

Разведочный анализ источников публикаций…………………………………………………………… 527

Разведочный анализ даты публикации………………………………………………………………………. 529

Разведочный анализ слов в статье……………………………………………………………………………… 530

Моделирование……………………………………………………………………………………………………………………….. 532

Однословная модель…………………………………………………………………………………………………….. 532

Многословная модель………………………………………………………………………………………………….. 534

Прогнозирование с помощью преобразования TF-IDF…………………………………………….. 536

Краткие выводы……………………………………………………………………………………………………………………….. 539

Приложение 1. Дополнительный материал…………………………………………… 541

Приложение 2. Источники данных………………………………………………………. 548

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

Об авторах……………………………………………………………………………………………. 558

Об изображении на обложке………………………………………………………………… 559

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

Новинка: “Экскурс в неопределенное поведение C++”

Экскурс в неопределенное поведение C++

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

Для специалистов по C++ и другим языкам для системного и низкоуровневого программирования

Вы изучили C++ за 21 день и уже готовы использовать его во всех своих проектах? Погодите, есть кое-что еще!

За последние годы особенно остро поднят вопрос безопасности при разработке программного обеспечения: операционных систем, драйверов, веб-серверов и облачных платформ. C++ считается одним из самых небезопасных языков программирования, который широко используются в реальных программах. С 2023 года звучат призывы избегать языка C++ из-за того, что в нём не гарантирована безопасность памяти: 70% всех уязвимостей в программном обеспечении так или иначе оказывались связаны с работой с памятью.

В этой книге приводится множество разнообразных примеров из реальной практики, демонстрирующих, как даже самый безобидный на первый взгляд код на C++ или C может скрывать в себе невероятные ошибки. Всё это из-за множества явных и неявных случаев неопределенного поведения, и лишь некоторые такие случаи описаны в стандартах этих языков. На страницах книги вы увидите, как истинные условия могут стать ложными, а недостижимый код начать выполняться, как код, работающий на вашей машине, перестанет работать у вашего коллеги, и как, добавив журналирование, можно «починить» код на время. С неопределенным поведением возможно всё!

  • Десятки историй о неоднозначных и сомнительных решениях в дизайне языка С++, приводящих к многим часам отладки в реальных проектах
  • Самые неожиданные ошибки и как они проявляются
  • Советы как избежать встречи с одним из самых загадочных “зверей” в разработке на C++ и других языках для системного и низкоуровневого программирования — неопределенным поведением

Книгу “Экскурс в неопределенное поведение C++” можно купить в нашем интенет-магазине.

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

Встречайте: “Django 5. Практика создания веб-сайтов на Python”

Django 5. Практика создания веб-сайтов на Python

Книга посвящена разработке веб-сайтов на языке Python с применением веб-фреймворка Django 5.1. Представлены новинки Django и дано наиболее полное описание его инструментов и средств: моделей, миграций, контролеров, шаблонов, обработки пользовательского ввода, разграничения доступа, посредников, сигналов, отправки электронной почты, локализации, кеширования, работы с базами данных PostgreSQL, поддержке нескольких веб-сайтов, простых страниц, статичных перенаправлений, жетонной аутентификации и др.  Описаны полезные дополнительные библиотеки, реализующие обработку BBCode, CAPTCHA, вывод графических миниатюр, интеграцию с Bootstrap. Рассказано о программировании веб-служб REST, настройке встроенного административного веб-сайта и публикации готового сайта посредством веб-серверов Uvicorn и Apache HTTP Server. Подробно описано создание полнофункционального веб-сайта — электронной доски объявлений.

Электронное приложение-архив на сайте издательства содержит коды всех примеров.

Для веб-программистов

Python и Django — веб-разработка на современном уровне

Что такое веб-фреймворк?

Фреймворк (от англ. framework — каркас) — это программная библиотека, реализующая бОльшую часть типовой функциональности разрабатываемого продукта. То есть в полном смысле слова каркас, на который разработчик конкретного продукта «навешивает» свои узлы, механизмы и детали декора.
Веб-фреймворк — это фреймворк для программирования веб-сайтов. Как правило, он обеспечивает следующую типовую функциональность:

  • взаимодействие с базой данных — посредством единых инструментов, независимых от конкретной СУБД;
  • обработка клиентских запросов — в частности, определение, какая страница запрашивается;
  • генерирование запрашиваемых веб-страниц на основе шаблонов;
  • разграничение доступа — допуск к закрытым страницам только зарегистрированных пользователей и только после выполнения ими входа;
  • обработка данных, занесенных посетителями в веб-формы, — в частности, проверка их на корректность;
  • получение и сохранение файлов, выгруженных пользователями;
  • рассылка электронных писем;
  • кеширование сгенерированных страниц на стороне сервера — для повышения производительности;
  • локализация — перевод сайта на другие языки.

Внимание

Автор предполагает, что читатели этой книги знакомы с языками HTML, CSS, JavaScript, Python, принципами работы СУБД и имеют базовые навыки в веб-разработке. В книге все это описываться не будет.

Django — популярнейший в мире веб-фреймворк, написанный на языке Python, и один из наиболее распространенных веб-фреймворков в мире. Появившись в 2005 году — именно тогда вышла его первая версия, — он до сих пор остается «на коне».

Фреймвок получил название в честь французского джазового гитариста-виртуоза Джанго Рейнхардт (цыг. Django Reinhardt; настоящее имя Жан Ренарт, фр. Jean Reinhardt; 23 января 1910 — 16 мая 1953). Прозвище Рейнхардта «Django» на цыганском языке означает «я проснулся».

Книгу “Django 5. Практика создания веб-сайтов на Python” можно купить в нашем интенет-магазине.

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

Что такое веб-фреймворк?…………………………………………………………………………………………………………. 19

Почему Django?………………………………………………………………………………………………………………………….. 20

Что нового в Django 5.1 и этой книге?……………………………………………………………………………………… 21

Использованные программные продукты……………………………………………………………………………….. 22

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

Часть I. Вводный курс…………………………………………………………………… 25

Глава 1. Основные понятия Django. Вывод данных………………………………. 26

1.1. Установка фреймворка……………………………………………………………………………………………………….. 26

1.2. Проект Django……………………………………………………………………………………………………………………… 27

1.3. Отладочный веб-сервер Django…………………………………………………………………………………………. 28

1.4. Приложения…………………………………………………………………………………………………………………………. 29

1.5. Контроллеры……………………………………………………………………………………………………………………….. 31

1.6. Маршруты и маршрутизатор…………………………………………………………………………………………….. 32

1.7. Модели…………………………………………………………………………………………………………………………………. 35

1.8. Миграции…………………………………………………………………………………………………………………………….. 37

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

1.10. Работа с моделями……………………………………………………………………………………………………………. 39

1.11. Шаблоны……………………………………………………………………………………………………………………………. 43

1.12. Контекст шаблона, рендеринг и сокращения…………………………………………………………………. 44

1.13. Административный веб-сайт Django………………………………………………………………………………. 46

1.14. Параметры полей и моделей……………………………………………………………………………………………. 51

1.15. Редактор модели……………………………………………………………………………………………………………….. 52

Глава 2. Связи. Ввод данных. Статические файлы………………………………… 54

2.1. Связи между моделями……………………………………………………………………………………………………….. 54

2.2. Строковое представление модели…………………………………………………………………………………….. 56

2.3. URL-параметры и параметризованные запросы……………………………………………………………… 57

2.4. Обратное разрешение интернет-адресов………………………………………………………………………….. 61

2.5. Формы, связанные с моделями…………………………………………………………………………………………… 63

2.6. Контроллеры-классы………………………………………………………………………………………………………….. 63

2.7. Наследование шаблонов……………………………………………………………………………………………………. 66

2.8. Статические файлы…………………………………………………………………………………………………………….. 69

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

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

3.1. Подготовка к работе…………………………………………………………………………………………………………… 74

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

3.3. Настройки проекта……………………………………………………………………………………………………………… 76

3.3.1. Основные настройки…………………………………………………………………………………………………….. 76

3.3.2. Параметры баз данных………………………………………………………………………………………………… 77

3.3.3. Список зарегистрированных приложений………………………………………………………………….. 79

3.3.4. Список зарегистрированных посредников…………………………………………………………………. 80

3.3.5. Языковые настройки…………………………………………………………………………………………………….. 82

3.3.6. Доступ к настройкам проекта из программного кода……………………………………………….. 85

3.3.7. Создание собственных настроек проекта…………………………………………………………………… 85

3.4. Создание, настройка и регистрация приложений……………………………………………………………. 86

3.4.1. Создание приложений………………………………………………………………………………………………….. 86

3.4.2. Настройки приложений………………………………………………………………………………………………… 86

3.4.3. Регистрация приложений в проекте…………………………………………………………………………….. 87

3.5. Средства отладки……………………………………………………………………………………………………………….. 88

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

3.5.2. Веб-страница сообщения об ошибке…………………………………………………………………………… 89

3.6. Работа с несколькими базами данных………………………………………………………………………………. 91

3.6.1. Регистрация используемых баз данных……………………………………………………………………… 91

3.6.2. Диспетчеризация данных…………………………………………………………………………………………….. 92

3.6.2.1. Автоматическая диспетчеризация данных……………………………………………………….. 92

3.6.2.2. Указание базы данных в административных командах………………………………….. 95

3.6.2.3. Ручная диспетчеризация данных………………………………………………………………………. 96

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

4.1. Объявление моделей…………………………………………………………………………………………………………… 97

4.2. Объявление полей модели………………………………………………………………………………………………….. 98

4.2.1. Параметры, поддерживаемые полями всех типов……………………………………………………… 98

4.2.2. Классы полей моделей……………………………………………………………………………………………….. 101

4.2.3. Создание полей со списком……………………………………………………………………………………….. 105

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

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

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

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

4.4. Параметры самой модели………………………………………………………………………………………………… 116

4.4.1. Получение доступа к параметрам модели из программного кода…………………………. 123

4.5. Интернет-адрес модели и его формирование…………………………………………………………………. 124

4.6. Методы модели…………………………………………………………………………………………………………………. 125

4.7. Валидация модели. Валидаторы…………………………………………………………………………………….. 127

4.7.1. Стандартные валидаторы Django…………………………………………………………………………….. 127

4.7.2. Вывод собственных сообщений об ошибках……………………………………………………………. 132

4.7.3. Написание своих валидаторов………………………………………………………………………………….. 133

4.7.4. Валидация модели………………………………………………………………………………………………………. 134

4.8. Создание моделей на основе существующих баз данных……………………………………………. 136

Глава 5. Миграции……………………………………………………………………………….. 137

5.1. Генерирование миграций…………………………………………………………………………………………………. 137

5.2. Модули миграций……………………………………………………………………………………………………………… 139

5.3. Выполнение миграций……………………………………………………………………………………………………… 139

5.4. Вывод списка миграций……………………………………………………………………………………………………. 141

5.5. Оптимизация миграций…………………………………………………………………………………………………….. 142

5.6. Слияние миграций…………………………………………………………………………………………………………….. 142

5.7. Очистка моделей……………………………………………………………………………………………………………….. 143

5.8. Отмена миграций………………………………………………………………………………………………………………. 144

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

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

6.2. Создание записей……………………………………………………………………………………………………………… 146

6.3. Занесение значений в поля разных типов………………………………………………………………………. 147

6.4. Сохранение записей…………………………………………………………………………………………………………. 150

6.4.1. Сохранение копий записей в разных базах данных………………………………………………… 151

6.5. Удаление записей……………………………………………………………………………………………………………… 151

6.6. Обработка связанных записей…………………………………………………………………………………………. 152

6.6.1. Обработка связи «один-со-многими»………………………………………………………………………… 152

6.6.2. Обработка связи «один-с-одним»………………………………………………………………………………. 154

6.6.3. Обработка связи «многие-со-многими»…………………………………………………………………….. 155

6.7. Произвольное переупорядочивание записей…………………………………………………………………. 156

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

6.9. Выполнение валидации модели………………………………………………………………………………………. 160

6.10. Асинхронная запись данных…………………………………………………………………………………………. 161

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

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

7.1.1. Извлечение значений из полей разных типов…………………………………………………………… 162

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

7.3. Выборка записей………………………………………………………………………………………………………………. 165

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

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

7.3.3. Получение числа записей в наборе…………………………………………………………………………… 167

7.3.4. Поиск записи……………………………………………………………………………………………………………….. 168

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

7.3.6. Написание условий фильтрации……………………………………………………………………………….. 170

7.3.6.1. Написание условий фильтрации по значениям полей связанных записей….. 173

7.3.6.2. Написание условий фильтрации по значениям полей типа JSON………………… 174

7.3.6.3. Сравнение со значениями других полей. Функциональные выражения……… 176

7.3.6.4. Сложные условия фильтрации. Выражения сравнения…………………………………. 177

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

7.3.8. Выборка указанного числа записей………………………………………………………………………….. 179

7.3.9. Экономная выборка записей……………………………………………………………………………………… 179

7.4. Сортировка записей………………………………………………………………………………………………………….. 180

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

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

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

7.5.3. Агрегатные функции…………………………………………………………………………………………………… 185

7.6. Оконные вычисления………………………………………………………………………………………………………… 187

7.6.1. Выполнение оконных вычислений……………………………………………………………………………. 187

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

7.6.3. Оконные функции………………………………………………………………………………………………………… 194

7.7. Вычисляемые поля уровня запроса………………………………………………………………………………… 196

7.8. Функциональные выражения: расширенные инструменты………………………………………….. 197

7.8.1. Функции СУБД……………………………………………………………………………………………………………. 197

7.8.1.1. Функции для работы со строками……………………………………………………………………. 197

7.8.1.2. Функции для работы с числами……………………………………………………………………….. 200

7.8.1.3. Функции для работы с датой и временем……………………………………………………….. 202

7.8.1.4. Функции для сравнения и преобразования значений…………………………………….. 204

7.8.2. Условные выражения СУБД………………………………………………………………………………………. 206

7.8.3. Вложенные запросы……………………………………………………………………………………………………. 207

7.8.4. Извлечение значений из полей типа JSON………………………………………………………………… 208

7.9. Объединение наборов записей………………………………………………………………………………………… 209

7.10. Извлечение значений только из заданных полей…………………………………………………………. 210

7.11. Указание базы данных для выборки записей………………………………………………………………. 213

7.12. Асинхронная выборка данных………………………………………………………………………………………. 213

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

8.1. Как работает маршрутизатор?……………………………………………………………………………………….. 215

8.1.1. Списки маршрутов уровня проекта и уровня приложения……………………………………… 216

8.2. Объявление маршрутов……………………………………………………………………………………………………. 217

8.3. Передача данных в контроллеры……………………………………………………………………………………. 219

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

8.5. Имена приложений……………………………………………………………………………………………………………. 220

8.6. Псевдонимы приложений…………………………………………………………………………………………………. 221

8.7. Указание шаблонных путей в виде регулярных выражений………………………………………… 222

8.8. Настройки маршрутизатора……………………………………………………………………………………………. 223

Глава 9. Контроллеры-функции…………………………………………………………… 224

9.1. Написание контроллеров-функций…………………………………………………………………………………. 224

9.1.1. Контроллеры, выполняющие одну задачу……………………………………………………………….. 225

9.1.2. Контроллеры, выполняющие несколько задач………………………………………………………… 226

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

9.3. Формирование ответа………………………………………………………………………………………………………. 230

9.3.1. Низкоуровневые средства для формирования ответа……………………………………………… 230

9.3.2. Формирование ответа на основе шаблона……………………………………………………………….. 231

9.3.3. Класс TemplateResponse: отложенный рендеринг шаблонов…………………………………. 233

9.4. Перенаправление………………………………………………………………………………………………………………. 234

9.5. Обратное разрешение интернет-адресов……………………………………………………………………….. 235

9.6. Уведомление об ошибках и особых ситуациях……………………………………………………………… 237

9.7. Специальные ответы………………………………………………………………………………………………………… 238

9.7.1. Потоковый ответ…………………………………………………………………………………………………………. 238

9.7.2. Файловый ответ…………………………………………………………………………………………………………… 239

9.7.3. JSON-ответ…………………………………………………………………………………………………………………… 240

9.8. Сокращения Django………………………………………………………………………………………………………….. 240

9.9. Программное разрешение интернет-адресов…………………………………………………………………. 242

9.10. Дополнительные настройки контроллеров………………………………………………………………….. 243

9.11. Асинхронные контроллеры-функции……………………………………………………………………………. 244

9.11.1. Преобразование синхронных функций в асинхронные и наоборот…………………….. 245

9.11.2. Обработка прерываний……………………………………………………………………………………………. 247

9.12. Асинхронные инструменты для формирования ответов…………………………………………….. 247

Глава 10. Контроллеры-классы……………………………………………………………. 249

10.1. Введение в контроллеры-классы…………………………………………………………………………………… 249

10.2. Базовые контроллеры-классы……………………………………………………………………………………….. 250

10.2.1. Контроллер View: диспетчеризация по HTTP-методу…………………………………………… 250

10.2.2. Примесь ContextMixin: создание контекста шаблона…………………………………………… 252

10.2.3. Примесь TemplateResponseMixin: рендеринг шаблона………………………………………….. 252

10.2.4. Контроллер TemplateView: все вместе…………………………………………………………………….. 253

10.3. Классы, выводящие одну запись…………………………………………………………………………………… 254

10.3.1. Примесь SingleObjectMixin: поиск записи………………………………………………………………. 254

10.3.2. Примесь SingleObjectTemplateResponseMixin: рендеринг шаблона
на основе найденной записи………………………………………………………………………………………………… 255

10.3.3. Контроллер DetailView: все вместе…………………………………………………………………………. 256

10.4. Классы, выводящие наборы записей…………………………………………………………………………….. 257

10.4.1. Примесь MultipleObjectMixin: извлечение набора записей………………………………….. 258

10.4.2. Примесь MultipleObjectTemplateResponseMixin: рендеринг шаблона
на основе набора записей……………………………………………………………………………………………………. 260

10.4.3. Контроллер ListView: все вместе……………………………………………………………………………… 261

10.5. Классы, работающие с формами…………………………………………………………………………………… 261

10.5.1. Классы для вывода и валидации форм…………………………………………………………………… 262

10.5.1.1. Примесь FormMixin: создание формы…………………………………………………………… 262

10.5.1.2. Контроллер ProcessFormView: вывод и обработка формы…………………………. 263

10.5.1.3. Контроллер-класс FormView: создание, вывод и обработка формы………….. 264

10.5.2. Классы для добавления, правки и удаления записей……………………………………………. 265

10.5.2.1. Примесь ModelFormMixin: создание формы, связанной с моделью…………… 265

10.5.2.2. Контроллер CreateView: создание новой записи…………………………………………. 266

10.5.2.3. Контроллер UpdateView: исправление записи…………………………………………….. 267

10.5.2.4. Примесь DeletionMixin: удаление записи……………………………………………………… 268

10.5.2.5. Контроллер DeleteView: удаление записи с подтверждением……………………. 268

10.6. Классы для вывода хронологических списков…………………………………………………………….. 270

10.6.1. Вывод последних записей………………………………………………………………………………………… 270

10.6.1.1. Примесь DateMixin: фильтрация записей по дате………………………………………… 270

10.6.1.2. Контроллер BaseDateListView: базовый класс…………………………………………….. 271

10.6.1.3. Контроллер ArchiveIndexView: вывод последних записей………………………….. 272

10.6.2. Вывод записей по годам…………………………………………………………………………………………… 273

10.6.2.1. Примесь YearMixin: извлечение года…………………………………………………………….. 273

10.6.2.2. Контроллер YearArchiveView: вывод записей за год……………………………………. 274

10.6.3. Вывод записей по месяцам………………………………………………………………………………………. 275

10.6.3.1. Примесь MonthMixin: извлечение месяца……………………………………………………… 275

10.6.3.2. Контроллер MonthArchiveView: вывод записей за месяц……………………………. 275

10.6.4. Вывод записей по неделям……………………………………………………………………………………….. 276

10.6.4.1. Примесь WeekMixin: извлечение номера недели………………………………………….. 276

10.6.4.2. Контроллер WeekArchiveView: вывод записей за неделю…………………………… 277

10.6.5. Вывод записей по дням…………………………………………………………………………………………….. 277

10.6.5.1. Примесь DayMixin: извлечение заданного числа…………………………………………. 278

10.6.5.2. Контроллер DayArchiveView: вывод записей за день………………………………….. 278

10.6.6. Контроллер TodayArchiveView: вывод записей за текущее число……………………….. 279

10.6.7. Контроллер DateDetailView: вывод одной записи за указанное число……………….. 279

10.7. Контроллер RedirectView: перенаправление……………………………………………………………….. 280

10.8. Контроллеры-классы смешанной функциональности………………………………………………… 282

10.9. Асинхронные контроллеры-классы………………………………………………………………………………. 283

Глава 11. Шаблоны и статические файлы: базовые инструменты……….. 285

11.1. Настройки проекта, касающиеся шаблонов………………………………………………………………… 285

11.2. Вывод данных. Директивы…………………………………………………………………………………………….. 290

11.3. Теги шаблонизатора………………………………………………………………………………………………………. 291

11.4. Фильтры…………………………………………………………………………………………………………………………… 300

11.5. Наследование шаблонов……………………………………………………………………………………………….. 310

11.6. Включение шаблонов…………………………………………………………………………………………………….. 312

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

11.7.1. Настройка подсистемы статических файлов…………………………………………………………. 312

11.7.2. Формирование интернет-адресов статических файлов………………………………………… 314

11.8. Вывод значений в «человеческом» представлении……………………………………………………… 316

Глава 12. Пагинатор…………………………………………………………………………….. 318

12.1. Класс Paginator: сам пагинатор. Создание пагинатора…………………………………………….. 318

12.2. Класс Page: часть пагинатора. Вывод пагинатора…………………………………………………….. 321

Глава 13. Формы, связанные с моделями……………………………………………… 323

13.1. Создание форм, связанных с моделями………………………………………………………………………… 323

13.1.1. Создание форм с помощью фабрики классов…………………………………………………………. 323

13.1.2. Создание форм путем быстрого объявления………………………………………………………….. 326

13.1.3. Создание форм путем полного объявления……………………………………………………………. 327

13.1.3.1. Как выполняется полное объявление?………………………………………………………….. 327

13.1.3.2. Параметры, поддерживаемые всеми типами полей формы………………………… 329

13.1.3.3. Классы полей форм…………………………………………………………………………………………. 330

13.1.3.4. Классы полей форм, применяемые по умолчанию………………………………………. 334

13.1.4. Задание элементов управления……………………………………………………………………………….. 335

13.1.4.1. Классы элементов управления………………………………………………………………………. 335

13.1.4.2. Элементы управления, применяемые по умолчанию………………………………….. 338

13.2. Обработка форм……………………………………………………………………………………………………………… 339

13.2.1. Добавление записи посредством формы………………………………………………………………… 339

13.2.1.1. Создание формы для добавления записи……………………………………………………… 339

13.2.1.2. Повторное создание формы……………………………………………………………………………. 339

13.2.1.3. Валидация данных, занесенных в форму……………………………………………………… 340

13.2.1.4. Сохранение данных, занесенных в форму……………………………………………………. 341

13.2.1.5. Доступ к данным, занесенным в форму…………………………………………………………. 342

13.2.2. Правка записи посредством формы………………………………………………………………………… 342

13.2.3. Некоторые соображения касательно удаления записей………………………………………. 343

13.3. Вывод форм на экран……………………………………………………………………………………………………… 344

13.3.1. Быстрый вывод форм………………………………………………………………………………………………… 344

13.3.2. Расширенный вывод форм……………………………………………………………………………………….. 346

13.3.2.1. Расширенный вывод форм: высокоуровневые инструменты………………………. 346

13.3.2.2. Расширенный вывод форм: низкоуровневые инструменты…………………………. 347

13.4. Валидация в формах………………………………………………………………………………………………………. 350

13.4.1. Валидация полей формы………………………………………………………………………………………….. 350

13.4.1.1. Валидация с применением валидаторов………………………………………………………. 350

13.4.1.2. Валидация путем переопределения методов формы…………………………………… 351

13.4.2. Валидация формы…………………………………………………………………………………………………….. 351

Глава 14. Наборы форм, связанные с моделями……………………………………. 353

14.1. Создание наборов форм, связанных с моделями…………………………………………………………. 353

14.2. Обработка наборов форм, связанных с моделями……………………………………………………….. 357

14.2.1. Создание набора форм, связанного с моделью……………………………………………………… 357

14.2.2. Повторное создание набора форм…………………………………………………………………………… 357

14.2.3. Валидация и сохранение набора форм…………………………………………………………………… 358

14.2.4. Доступ к данным, занесенным в набор форм…………………………………………………………. 358

14.2.5. Реализация переупорядочивания записей……………………………………………………………… 359

14.3. Вывод наборов форм на экран………………………………………………………………………………………. 361

14.3.1. Быстрый вывод наборов форм…………………………………………………………………………………. 361

14.3.2. Расширенный вывод наборов форм………………………………………………………………………… 362

14.4. Валидация в наборах форм……………………………………………………………………………………………. 363

14.5. Встроенные наборы форм……………………………………………………………………………………………… 364

14.5.1. Создание встроенных наборов форм………………………………………………………………………. 364

14.5.2. Обработка встроенных наборов форм……………………………………………………………………. 365

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

15.1. Как работает подсистема разграничения доступа?……………………………………………………. 367

15.2. Подготовка подсистемы разграничения доступа………………………………………………………… 368

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

15.2.2. Создание суперпользователя…………………………………………………………………………………… 369

15.2.3. Смена пароля пользователя…………………………………………………………………………………….. 370

15.3. Работа со списками пользователей и групп…………………………………………………………………. 370

15.3.1. Список пользователей………………………………………………………………………………………………. 370

15.3.2. Группы пользователей. Список групп…………………………………………………………………….. 372

15.4. Вход, выход и служебные процедуры………………………………………………………………………….. 373

15.4.1. Контроллер LoginView: вход на сайт……………………………………………………………………… 373

15.4.2. Контроллер LogoutView: выход с сайта…………………………………………………………………. 375

15.4.3. Контроллер PasswordChangeView: смена пароля…………………………………………………. 377

15.4.4. Контроллер PasswordChangeDoneView: уведомление об успешной смене пароля 378

15.4.5. Контроллер PasswordResetView: отправка письма для сброса пароля……………….. 378

15.4.6. Контроллер PasswordResetDoneView: уведомление об отправке письма для сброса пароля              380

15.4.7. Контроллер PasswordResetConfirmView: собственно сброс пароля……………………. 381

15.4.8. Контроллер PasswordResetCompleteView: уведомление об успешном сбросе пароля……….. 382

15.5. Получение сведений о пользователях…………………………………………………………………………… 383

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

15.5.2. Получение пользователей, обладающих заданным правом………………………………… 386

15.6. Авторизация…………………………………………………………………………………………………………………….. 387

15.6.1. Авторизация на уровне всего веб-сайта…………………………………………………………………. 387

15.6.2. Авторизация в контроллерах…………………………………………………………………………………… 389

15.6.2.1. Авторизация в контроллерах-функциях: непосредственные проверки……… 389

15.6.2.2. Авторизация в контроллерах-функциях: применение декораторов…………… 390

15.6.2.3. Авторизация в контроллерах-классах………………………………………………………….. 392

15.6.3. Авторизация в шаблонах…………………………………………………………………………………………. 394

15.7. Асинхронные инструменты для разграничения доступа……………………………………………. 395

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

Глава 16. Модели: расширенные инструменты…………………………………….. 398

16.1. Управление выборкой полей…………………………………………………………………………………………. 398

16.2. Связи «многие-со-многими» с дополнительными данными………………………………………… 402

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

16.4. Наследование моделей…………………………………………………………………………………………………… 411

16.4.1. Прямое наследование моделей………………………………………………………………………………… 411

16.4.2. Абстрактные модели………………………………………………………………………………………………… 414

16.4.3. Прокси-модели………………………………………………………………………………………………………….. 416

16.5. Создание своих диспетчеров записей…………………………………………………………………………… 416

16.5.1. Создание диспетчеров записей……………………………………………………………………………….. 416

16.5.2. Создание диспетчеров обратной связи…………………………………………………………………… 418

16.6. Создание своих наборов записей………………………………………………………………………………….. 419

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

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

16.7.1.1. Режим по умолчанию: каждая операция — в отдельной транзакции………… 422

16.7.1.2. Режим атомарных запросов…………………………………………………………………………… 423

16.7.1.3. Режим по умолчанию на уровне контроллера……………………………………………… 423

16.7.1.4. Режим атомарных запросов на уровне контроллера…………………………………… 424

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

16.7.3. Обработка подтверждений транзакций………………………………………………………………….. 427

16.8. Отправка SQL-запросов, написанных вручную…………………………………………………………… 428

16.8.1. Отправка SQL-запросов на выборку записей из заданной модели………………………. 428

16.8.2. Отправка произвольных SQL-запросов………………………………………………………………….. 429

Глава 17. Формы и наборы форм: расширенные инструменты и дополнительная библиотека  432

17.1. Формы, не связанные с моделями………………………………………………………………………………….. 432

17.2. Наборы форм, не связанные с моделями………………………………………………………………………. 433

17.3. Расширенные средства для вывода форм и наборов форм…………………………………………. 435

17.3.1. Указание CSS-стилей у форм…………………………………………………………………………………… 435

17.3.2. Настройка выводимых форм……………………………………………………………………………………. 435

17.3.3. Настройка наборов форм…………………………………………………………………………………………. 436

17.3.4. Шаблоны форм, наборов форм и элементов управления……………………………………… 438

17.3.4.1. Шаблоны форм………………………………………………………………………………………………… 438

17.3.4.2. Шаблоны наборов форм…………………………………………………………………………………. 440

17.3.4.3. Шаблон поля формы……………………………………………………………………………………….. 441

17.3.4.4. Шаблоны элементов управления…………………………………………………………………… 441

17.4. Библиотека Django Simple Captcha: поддержка CAPTCHA……………………………………….. 443

17.4.1. Установка Django Simple Captcha…………………………………………………………………………… 443

17.4.2. Использование Django Simple Captcha…………………………………………………………………… 444

17.4.3. Настройка Django Simple Captcha………………………………………………………………………….. 445

17.4.4. Дополнительная команда captcha_clean……………………………………………………………….. 447

17.5. Дополнительные настройки проекта, имеющие отношение к формам……………………… 447

Глава 18. Поддержка баз данных PostgreSQL и библиотека
django-localflavor………………………………………………………………………………….. 448

18.1. Дополнительные инструменты для работы с PostgreSQL…………………………………………… 448

18.1.1. Объявление моделей для работы с PostgreSQL………………………………………………………. 448

18.1.1.1. Поля, специфичные для PostgreSQL……………………………………………………………….. 448

18.1.1.2. Индексы PostgreSQL………………………………………………………………………………………… 451

18.1.1.3. Операционные выражения……………………………………………………………………………… 453

18.1.1.4. Условие ExclusionConstraint………………………………………………………………………….. 453

18.1.1.5. Расширения PostgreSQL………………………………………………………………………………….. 455

18.1.1.6. Валидаторы PostgreSQL…………………………………………………………………………………. 457

18.1.2. Запись и выборка данных в PostgreSQL………………………………………………………………….. 459

18.1.2.1. Запись и выборка значений полей в PostgreSQL…………………………………………… 459

18.1.2.2. Фильтрация записей в PostgreSQL…………………………………………………………………. 461

18.1.3. Агрегатные функции PostgreSQL……………………………………………………………………………… 467

18.1.4. Функции СУБД, специфичные для PostgreSQL……………………………………………………….. 470

18.1.5. Вложенные запросы PostgreSQL……………………………………………………………………………… 470

18.1.6. Полнотекстовая фильтрация PostgreSQL………………………………………………………………… 471

18.1.6.1. Модификатор search……………………………………………………………………………………….. 472

18.1.6.2. Функции СУБД для полнотекстовой фильтрации………………………………………… 472

18.1.6.3. Функции СУБД для фильтрации по похожим словам………………………………….. 477

18.1.7. Создание форм для работы с PostgreSQL……………………………………………………………….. 479

18.1.7.1. Поля форм, специфичные для PostgreSQL……………………………………………………… 479

18.1.7.2. Элементы управления, специфичные для PostgreSQL………………………………….. 481

18.2. Библиотека django-localflavor: дополнительные поля для моделей и форм……………… 481

18.2.1. Установка django-localflavor……………………………………………………………………………………. 482

18.2.2. Поля модели, предоставляемые django-localflavor………………………………………………… 482

18.2.3. Поля формы, предоставляемые django-localflavor…………………………………………………. 483

18.2.4. Элементы управления, предоставляемые django-localflavor………………………………… 483

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

19.1. Библиотека django-precise-bbcode: поддержка BBCode……………………………………………… 484

19.1.1. Установка django-precise-bbcode…………………………………………………………………………….. 484

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

19.1.3. Обработка BBCode…………………………………………………………………………………………………… 486

19.1.3.1. Обработка BBCode при выводе…………………………………………………………………….. 486

19.1.3.2. Хранение BBCode в модели…………………………………………………………………………… 487

19.1.4. Создание дополнительных BBCode-тегов……………………………………………………………… 488

19.1.5. Создание графических смайликов…………………………………………………………………………… 490

19.1.6. Настройка django-precise-bbcode…………………………………………………………………………….. 490

19.2. Библиотека django-bootstrap5: интеграция с Bootstrap 5……………………………………………. 491

19.2.1. Установка django-bootstrap5……………………………………………………………………………………. 492

19.2.2. Использование django-bootstrap5……………………………………………………………………………. 492

19.2.3. Настройка django-bootstrap5…………………………………………………………………………………… 497

19.3. Написание своих фильтров и тегов……………………………………………………………………………….. 498

19.3.1. Организация исходного кода…………………………………………………………………………………… 499

19.3.2. Написание фильтров………………………………………………………………………………………………… 499

19.3.2.1. Написание и использование простейших фильтров……………………………………. 499

19.3.2.2. Управление заменой недопустимых символов HTML………………………………… 501

19.3.3. Написание тегов……………………………………………………………………………………………………….. 502

19.3.3.1. Написание тегов, выводящих элементарные значения……………………………….. 502

19.3.3.2. Написание шаблонных тегов…………………………………………………………………………. 504

19.3.4. Регистрация фильтров и тегов………………………………………………………………………………….. 505

19.4. Переопределение шаблонов………………………………………………………………………………………….. 506

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

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

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

20.1.2. Указание маршрута для выгруженных файлов……………………………………………………… 511

20.2. Хранение файлов в моделях…………………………………………………………………………………………… 512

20.2.1. Типы полей модели, предназначенные для хранения файлов……………………………… 512

20.2.2. Поля форм, валидаторы и элементы управления, служащие для указания файлов 514

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

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

20.2.5. Удаление выгруженного файла……………………………………………………………………………….. 519

20.3. Хранение путей к файлам в моделях…………………………………………………………………………….. 520

20.4. Низкоуровневые средства для сохранения выгруженных файлов…………………………….. 520

20.4.1. Класс UploadedFile: выгруженный файл. Сохранение выгруженных файлов……. 521

20.4.2. Вывод выгруженных файлов низкоуровневыми средствами………………………………… 522

20.5. Библиотека django-cleanup: автоматическое удаление ненужных файлов………………. 523

20.6. Библиотека easy-thumbnails: вывод миниатюр……………………………………………………………. 525

20.6.1. Установка easy-thumbnails………………………………………………………………………………………. 525

20.6.2. Настройка easy-thumbnails………………………………………………………………………………………. 526

20.6.2.1. Пресеты миниатюр………………………………………………………………………………………….. 526

20.6.2.2. Остальные настройки библиотеки………………………………………………………………… 528

20.6.3. Вывод миниатюр в шаблонах………………………………………………………………………………….. 530

20.6.4. Хранение миниатюр в моделях……………………………………………………………………………….. 531

20.6.5. Дополнительная команда thumbnail_cleanup………………………………………………………… 532

Глава 21. Разграничение доступа: расширенные инструменты……………. 534

21.1. Настройки проекта, касающиеся разграничения доступа…………………………………………. 534

21.2. Работа с пользователями……………………………………………………………………………………………….. 535

21.2.1. Создание пользователей………………………………………………………………………………………….. 535

21.2.2. Работа с паролями……………………………………………………………………………………………………. 535

21.3. Вход и выход…………………………………………………………………………………………………………………… 536

21.4. Валидация паролей………………………………………………………………………………………………………… 537

21.4.1. Стандартные валидаторы паролей………………………………………………………………………… 538

21.4.2. Написание своих валидаторов паролей…………………………………………………………………. 539

21.4.3. Выполнение валидации паролей…………………………………………………………………………….. 540

21.5. Обращение к модели пользователя……………………………………………………………………………….. 541

21.6. Создание своей модели пользователя…………………………………………………………………………… 542

21.7. Создание своих прав пользователя………………………………………………………………………………. 543

21.8. Асинхронные расширенные инструменты для разграничения доступа……………………. 544

Глава 22. Посредники и обработчики контекста………………………………….. 545

22.1. Посредники……………………………………………………………………………………………………………………… 545

22.1.1. Стандартные посредники………………………………………………………………………………………… 545

22.1.2. Порядок выполнения посредников………………………………………………………………………….. 547

22.1.3. Написание своих посредников………………………………………………………………………………… 547

22.1.3.1. Посредники-функции………………………………………………………………………………………. 548

22.1.3.2. Посредники-классы…………………………………………………………………………………………. 549

22.1.3.3. Асинхронные и универсальные посредники………………………………………………… 551

22.2. Обработчики контекста………………………………………………………………………………………………….. 554

Глава 23. Cookie, сессии, всплывающие сообщения
и подписывание данных………………………………………………………………………. 555

23.1. Cookie………………………………………………………………………………………………………………………………. 555

23.2. Сессии………………………………………………………………………………………………………………………………. 558

23.2.1. Настройка сессий……………………………………………………………………………………………………… 558

23.2.2. Использование сессий………………………………………………………………………………………………. 560

23.2.3. Сохранение сессий……………………………………………………………………………………………………. 562

23.2.4. Дополнительная команда clearsessions………………………………………………………………….. 562

23.2.5. Асинхронные инструменты для работы с сессиями………………………………………………. 563

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

23.3.1. Настройка всплывающих сообщений…………………………………………………………………….. 563

23.3.2. Уровни всплывающих сообщений…………………………………………………………………………… 564

23.3.3. Создание всплывающих сообщений……………………………………………………………………….. 564

23.3.4. Вывод всплывающих сообщений……………………………………………………………………………. 566

23.3.4.1. Задание минимального уровня выводимых всплывающих сообщений…….. 567

23.3.5. Объявление своих уровней всплывающих сообщений………………………………………….. 568

23.4. Подписывание данных…………………………………………………………………………………………………… 568

Глава 24. Сигналы……………………………………………………………………………….. 572

24.1. Обработка сигналов……………………………………………………………………………………………………….. 572

24.1.1. Объявление обработчиков сигналов……………………………………………………………………….. 572

24.1.2. Привязка обработчиков к сигналам: первый способ…………………………………………….. 573

24.1.3. Привязка обработчиков к сигналам: второй способ……………………………………………… 575

24.1.4. Отмена привязки обработчиков к сигналам…………………………………………………………… 575

24.2. Встроенные сигналы Django………………………………………………………………………………………….. 576

24.3. Объявление и отправка своих сигналов……………………………………………………………………….. 580

24.3.1. Асинхронные инструменты для отправки сигналов……………………………………………… 582

Глава 25. Поддержка нескольких веб-сайтов, простые веб-страницы и статичные перенаправления…………………………………………………………………………………………………………….. 583

25.1. Поддержка нескольких веб-сайтов……………………………………………………………………………….. 583

25.1.1. Подготовка подсистемы поддержки нескольких веб-сайтов к работе…………………. 583

25.1.2. Регистрация веб-сайтов в проекте…………………………………………………………………………… 584

25.1.3. Модель веб-сайта……………………………………………………………………………………………………… 584

25.1.4. Получение веб-сайта, к которому был выполнен запрос……………………………………… 585

25.1.5. Специфические случаи использования подсистемы поддержки
нескольких веб-сайтов………………………………………………………………………………………………………….. 586

25.2. Простые веб-страницы…………………………………………………………………………………………………… 587

25.2.1. Подготовка подсистемы простых веб-страниц………………………………………………………. 587

25.2.2. Создание простых веб-страниц……………………………………………………………………………….. 588

25.2.3. Вывод простых веб-страниц……………………………………………………………………………………. 588

25.2.3.1. Прямой вывод простых веб-страниц……………………………………………………………… 588

25.2.3.2. Использование встроенного списка маршрутов………………………………………….. 589

25.2.3.3. Написание отдельных маршрутов для конкретных простых веб-страниц.. 589

25.2.4. Шаблоны простых веб-страниц………………………………………………………………………………. 590

25.2.5. Вывод гиперссылок на простые веб-страницы………………………………………………………. 591

25.3. Статичные перенаправления…………………………………………………………………………………………. 592

25.3.1. Подготовка подсистемы статичных перенаправлений…………………………………………. 592

25.3.2. Создание статичных перенаправлений………………………………………………………………….. 592

25.3.3. Выполнение статичных перенаправлений…………………………………………………………….. 593

Глава 26. Отправка электронных писем………………………………………………. 594

26.1. Настройка подсистемы отправки электронных писем……………………………………………….. 594

26.2. Низкоуровневые инструменты для отправки писем……………………………………………………. 596

26.2.1. Класс EmailMessage: обычное электронное письмо……………………………………………… 596

26.2.2. Формирование писем на основе шаблонов…………………………………………………………….. 598

26.2.3. Использование соединений. Массовая рассылка писем……………………………………….. 598

26.2.4. Класс EmailMultiAlternatives: составное письмо…………………………………………………… 599

26.3. Высокоуровневые инструменты для отправки писем…………………………………………………. 600

26.3.1. Отправка писем по произвольным адресам……………………………………………………………. 600

26.3.2. Отправка писем зарегистрированным пользователям………………………………………….. 601

26.3.3. Отправка писем администраторам и редакторам сайта………………………………………. 602

26.4. Отправка тестового электронного письма……………………………………………………………………. 603

26.5. Использование отладочного SMTP-сервера aiosmtpd………………………………………………… 603

Глава 27. Кеширование………………………………………………………………………… 605

27.1. Кеширование на стороне сервера…………………………………………………………………………………. 605

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

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

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

27.1.2. Высокоуровневые средства кеширования……………………………………………………………… 611

27.1.2.1. Кеширование всего веб-сайта………………………………………………………………………… 611

27.1.2.2. Кеширование на уровне отдельных контроллеров……………………………………… 612

27.1.2.3. Управление кешированием…………………………………………………………………………….. 613

27.1.3. Низкоуровневые средства кеширования………………………………………………………………… 614

27.1.3.1. Кеширование фрагментов веб-страниц…………………………………………………………. 614

27.1.3.2. Кеширование произвольных значений…………………………………………………………. 616

27.1.3.3. Асинхронные инструменты для кеширования произвольных значений……. 619

27.2. Кеширование на стороне клиента…………………………………………………………………………………. 619

27.2.1. Автоматическая обработка заголовков………………………………………………………………….. 619

27.2.2. Управление кешированием в контроллерах…………………………………………………………… 621

27.2.2.1. Условная обработка запросов……………………………………………………………………….. 621

27.2.2.2. Прямое указание параметров кеширования…………………………………………………. 622

27.2.2.3. Запрет кеширования……………………………………………………………………………………….. 623

27.2.3. Управление кешированием в посредниках…………………………………………………………….. 623

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

28.1. Локализация строк………………………………………………………………………………………………………….. 625

28.1.1. Пометка локализуемых строк………………………………………………………………………………….. 625

28.1.1.1. Пометка локализуемых строк в коде шаблонов…………………………………………… 626

28.1.1.2. Пометка локализуемых строк в Python-коде………………………………………………… 629

28.1.2. Создание языковых модулей……………………………………………………………………………………. 631

28.1.2.1. Генерирование языковых модулей………………………………………………………………… 631

28.1.2.2. Перевод локализуемых строк………………………………………………………………………… 632

28.1.2.3. Компиляция языковых модулей…………………………………………………………………….. 635

28.1.3. Переключение веб-сайта на требуемый язык…………………………………………………………. 636

28.1.3.1. Автоматическое переключение на требуемый язык…………………………………….. 636

28.1.3.2. Вывод сведений о поддерживаемых языках…………………………………………………. 637

28.1.3.3. Создание языковых редакций веб-сайта………………………………………………………. 639

28.1.3.4. Переключение на требуемый язык без создания языковых редакций
веб-сайта…………………………………………………………………………………………………………………………. 640

28.1.4. Дополнительные инструменты для локализации строк………………………………………… 642

28.1.5. Настройка локализации строк………………………………………………………………………………… 643

28.2. Локализация форматов…………………………………………………………………………………………………… 645

28.3. Локализация временнх зон………………………………………………………………………………………….. 646

28.3.1. Реализация переключения веб-сайта на требуемую временнýю зону…………………. 646

28.3.2. Вывод значений времени и временнх отметок в разных временнх зонах………. 649

Глава 29. Административный веб-сайт Django…………………………………….. 651

29.1. Подготовка административного веб-сайта к работе…………………………………………………… 651

29.2. Регистрация моделей на административном веб-сайте………………………………………………. 652

29.3. Редакторы моделей…………………………………………………………………………………………………………. 653

29.3.1. Параметры списка записей………………………………………………………………………………………. 653

29.3.1.1. Параметры списка записей: состав выводимого списка……………………………… 653

29.3.1.2. Параметры списка записей: фильтрация и сортировка………………………………. 658

29.3.1.3. Параметры списка записей: прочие………………………………………………………………. 663

29.3.2. Параметры страниц добавления и правки записей……………………………………………….. 665

29.3.2.1. Параметры страниц добавления и правки записей: набор выводимых полей 665

29.3.2.2. Параметры страниц добавления и правки записей:
элементы управления…………………………………………………………………………………………………….. 668

29.3.2.3. Параметры страниц добавления и правки записей: прочие……………………….. 671

29.3.3. Регистрация редакторов на административном веб-сайте…………………………………… 672

29.4. Встроенные редакторы………………………………………………………………………………………………….. 673

29.4.1. Объявление встроенного редактора……………………………………………………………………….. 673

29.4.2. Параметры встроенного редактора………………………………………………………………………… 674

29.4.3. Регистрация встроенного редактора………………………………………………………………………. 676

29.5. Действия…………………………………………………………………………………………………………………………… 676

Глава 30. Разработка веб-служб REST. Библиотека Django REST framework…….. 679

30.1. Установка и подготовка к работе Django REST framework………………………………………… 680

30.2. Введение в Django REST framework. Вывод данных…………………………………………………… 682

30.2.1. Сериализаторы…………………………………………………………………………………………………………. 682

30.2.2. Веб-представление JSON………………………………………………………………………………………….. 683

30.2.3. Вывод данных на стороне клиента…………………………………………………………………………. 685

30.2.4. Первый принцип REST: идентификация ресурса по интернет-адресу………………… 686

30.3. Ввод и правка данных……………………………………………………………………………………………………. 688

30.3.1. Второй принцип REST: идентификация действия по HTTP-методу…………………….. 688

30.3.2. Парсеры веб-форм…………………………………………………………………………………………………….. 692

30.4. Контроллеры-классы Django REST framework……………………………………………………………. 693

30.4.1. Контроллер-класс низкого уровня………………………………………………………………………….. 693

30.4.2. Контроллеры-классы высокого уровня: комбинированные и простые……………….. 694

30.5. Метаконтроллеры…………………………………………………………………………………………………………… 696

30.6. Разграничение доступа в Django REST framework……………………………………………………… 697

30.6.1. Третий принцип REST: данные клиента хранятся на стороне клиента.
Основная аутентификация…………………………………………………………………………………………………… 697

30.6.2. Классы разграничения доступа………………………………………………………………………………. 698

30.6.3. Жетонная аутентификация. Библиотека Simple JWT…………………………………………….. 699

30.6.3.1. Подготовка Simple JWT к работе…………………………………………………………………… 700

30.6.3.2. Контроллеры Simple JWT и написание маршрутов…………………………………….. 701

30.6.3.3. Использование Simple JWT на стороне клиента…………………………………………… 703

30.6.3.4. Настройка Simple JWT……………………………………………………………………………………. 705

Глава 31. Средства журналирования и отладки……………………………………. 707

31.1. Средства журналирования Django……………………………………………………………………………….. 707

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

31.1.2. Объект сообщения…………………………………………………………………………………………………….. 708

31.1.3. Форматировщики………………………………………………………………………………………………………. 709

31.1.4. Фильтры…………………………………………………………………………………………………………………….. 710

31.1.5. Обработчики……………………………………………………………………………………………………………… 712

31.1.6. Регистраторы…………………………………………………………………………………………………………….. 717

31.1.7. Пример настройки подсистемы журналирования…………………………………………………. 719

31.1.8. Предотвращение попадания персональных данных в отчеты об ошибках………… 721

31.2. Панель Django Debug Toolbar………………………………………………………………………………………… 722

31.2.1. Подготовка Django Debug Toolbar к работе……………………………………………………………. 722

31.2.2. Работа с Django Debug Toolbar………………………………………………………………………………… 723

31.3. Отправка электронных писем с сообщениями об отсутствующих веб-страницах…… 726

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

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

32.1.1. Написание шаблонов веб-страниц с сообщениями об ошибках………………………….. 727

32.1.2. Удаление ненужных данных……………………………………………………………………………………. 728

32.1.3. Настройка эксплуатационного режима…………………………………………………………………. 729

32.1.4. Настройка параметров безопасности…………………………………………………………………….. 730

32.1.5. Настройка веб-сайта для работы по протоколу HTTPS……………………………………….. 733

32.1.6. Настройка веб-сайта для работы через обратный прокси-сервер………………………. 735

32.1.7. Окончательная проверка веб-сайта………………………………………………………………………… 736

32.2. Публикация веб-сайта……………………………………………………………………………………………………. 737

32.2.1. Публикация посредством Uvicorn……………………………………………………………………………. 737

32.2.1.1. Подготовка веб-сайта к публикации посредством Uvicorn…………………………. 738

32.2.1.2. Запуск и остановка Uvicorn……………………………………………………………………………. 739

32.2.2. Публикация посредством Apache HTTP Server………………………………………………………. 739

32.2.2.1. Подготовка веб-сайта к публикации посредством Apache HTTP Server……. 740

32.2.2.2. Подготовка платформы для публикации посредством
Apache HTTP Server……………………………………………………………………………………………………….. 741

32.2.2.3. Конфигурирование веб-сайта для работы под Apache HTTP Server………….. 742

32.2.3. Другие варианты публикации…………………………………………………………………………………. 744

Часть IV. Практическое занятие: разработка веб-сайта.. 745

Глава 33. Дизайн. Вспомогательные веб-страницы………………………………. 746

33.1. План веб-сайта………………………………………………………………………………………………………………… 746

33.2. Подготовка проекта и приложения main………………………………………………………………………. 747

33.2.1. Создание и настройка проекта………………………………………………………………………………… 747

33.2.2. Создание и настройка приложения main………………………………………………………………… 748

33.3. Базовый шаблон……………………………………………………………………………………………………………… 748

33.4. Главная веб-страница…………………………………………………………………………………………………….. 755

33.5. Вспомогательные веб-страницы……………………………………………………………………………………. 757

Глава 34. Работа с посетителями и разграничение доступа………………….. 760

34.1. Модель пользователя……………………………………………………………………………………………………… 760

34.2. Основные веб-страницы: входа, профиля и выхода……………………………………………………. 761

34.2.1. Веб-страница входа………………………………………………………………………………………………….. 761

34.2.2. Веб-страница пользовательского профиля…………………………………………………………….. 764

34.2.3. Реализация выхода…………………………………………………………………………………………………… 765

34.3. Веб-страницы правки личных данных посетителя……………………………………………………… 766

34.3.1. Веб-страница правки основных сведений………………………………………………………………. 766

34.3.2. Веб-страница правки пароля…………………………………………………………………………………… 768

34.4. Веб-страницы регистрации и активации посетителей………………………………………………… 770

34.4.1. Веб-страницы регистрации нового посетителя……………………………………………………… 770

34.4.1.1. Форма для занесения сведений о новом посетителе……………………………………. 770

34.4.1.2. Средства для регистрации посетителя………………………………………………………….. 772

34.4.1.3. Средства для отправки писем с требованиями активации………………………….. 774

34.4.2. Веб-страницы активации посетителя……………………………………………………………………… 775

34.5. Веб-страница удаления посетителя……………………………………………………………………………… 778

34.6. Инструменты для администрирования посетителей…………………………………………………… 779

Глава 35. Рубрики………………………………………………………………………………… 782

35.1. Модели рубрик……………………………………………………………………………………………………………….. 782

35.1.1. Базовая модель рубрик…………………………………………………………………………………………….. 782

35.1.2. Модель надрубрик……………………………………………………………………………………………………. 783

35.1.3. Модель подрубрик……………………………………………………………………………………………………. 784

35.2. Инструменты для администрирования рубрик……………………………………………………………. 785

35.3. Вывод списка рубрик в вертикальной панели навигации…………………………………………… 786

Глава 36. Объявления………………………………………………………………………….. 789

36.1. Подготовка к обработке выгруженных файлов……………………………………………………………. 789

36.2. Модели объявлений и дополнительных иллюстраций……………………………………………….. 790

36.2.1. Модель самих объявлений……………………………………………………………………………………….. 790

36.2.2. Модель дополнительных иллюстраций…………………………………………………………………. 793

36.2.3. Реализация удаления объявлений в модели пользователя……………………………………. 793

36.3. Инструменты для администрирования объявлений…………………………………………………….. 794

36.4. Вывод объявлений………………………………………………………………………………………………………….. 794

36.4.1. Вывод списка объявлений………………………………………………………………………………………… 795

36.4.1.1. Форма поиска и контроллер списка объявлений…………………………………………. 795

36.4.1.2. Реализация корректного возврата…………………………………………………………………. 796

36.4.1.3. Шаблон веб-страницы списка объявлений…………………………………………………… 798

36.4.2. Веб-страница сведений о выбранном объявлении………………………………………………… 801

36.4.3. Вывод последних 10 объявлений на главной веб-странице…………………………………. 805

36.5. Работа с объявлениями…………………………………………………………………………………………………… 805

36.5.1. Вывод объявлений, оставленных текущим посетителем………………………………………. 805

36.5.2. Добавление, правка и удаление объявлений………………………………………………………….. 806

Глава 37. Комментарии………………………………………………………………………… 811

37.1. Подготовка к выводу CAPTCHA……………………………………………………………………………………. 811

37.2. Модель комментариев……………………………………………………………………………………………………. 812

37.3. Вывод и добавление комментариев………………………………………………………………………………. 813

37.4. Отправка уведомлений о новых комментариях…………………………………………………………… 816

Глава 38. Бэкенд REST…………………………………………………………………………. 818

38.1. Бэкенд………………………………………………………………………………………………………………………………. 818

38.1.1. Подготовка к разработке бэкенда…………………………………………………………………………… 818

38.1.2. Список объявлений…………………………………………………………………………………………………… 819

38.1.3. Сведения о выбранном объявлении………………………………………………………………………… 820

38.1.4. Вывод и добавление комментариев………………………………………………………………………… 821

38.2. Тестовый фронтенд…………………………………………………………………………………………………………. 823

38.2.1. Введение в Angular……………………………………………………………………………………………………. 823

38.2.2. Подготовка к разработке фронтенда………………………………………………………………………. 824

38.2.3. Ключевые файлы и модули Angular-проекта…………………………………………………………. 825

38.2.3.1. Стартовая веб-страница…………………………………………………………………………………. 825

38.2.3.2. Стартовый модуль………………………………………………………………………………………….. 826

38.2.3.3. Конфигурационный модуль…………………………………………………………………………… 826

38.2.4. Модуль списка маршрутов………………………………………………………………………………………. 828

38.2.5. Компонент приложения AppComponent………………………………………………………………….. 828

38.2.6. Компонент списка объявлений BbListComponent………………………………………………….. 830

38.2.7. Компонент сведений об объявлении BbDetailComponent……………………………………… 835

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

Приложение. Описание файлового архива, сопровождающего книгу….. 844

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