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

Вышла книга: “Анализ данных. Как стать профессионалом”

Анализ данных. Как стать профессионалом

В книге разобраны восемь сценариев, с которыми неизбежно придется иметь дело любому аналитику данных. Рассказано, как на языке Python обращаться не только с готовыми, но и с частично обработанными и фрагментарными данными. Рассмотрены инструменты из популярных библиотек Pandas и Numpy, освещена проблема доведения незавершенных проектов до результата, объяснено, как построить минимальную полноценную модель и проверить ее работоспособность. Особое внимание уделено анализу временных рядов и других данных, которые могут быстро меняться.

Для начинающих аналитиков данных

Книга предназначена для начинающих аналитиков данных.Дэвид Эсбот — автор книги, архитектор ПО и преподаватель курсов по Data Science, один из ведущих подкаста Half Stack Data Science.


Отзывы о книге

Продуманная и хорошо написанная книга, демонстрирующая, как решать всевозможные проблемы, связанные с анализом данных.
 Наоми Седер, член фонда Python Software Foundation

Отличный материал для любого амбициозного исследователя данных!
 Эндрю Р. Фрид, компания IBM

Дэвид выстроил ясный и легко воспроизводимый аппарат, который поможет вам справиться с не до конца сформулированными требованиями заказчика и найти решение гораздо быстрее, чем от вас ожидают!
 Шон Макгирр, компания DevOn Software Services

В этой книге маститый аналитик данных рассказывает, как справляться с распространёнными проблемами, возникающими на практике, не забыв о тех коварных приемах мастеров, говорить о которых не принято.
 Рэнди Ау, компания Google

В реальной практике анализ данных бывает сложным и запутанным.Чтобы преуспеть в нем, придется освоить работу с не вполне достоверными источниками данных, неоднозначными запросами и несовместимыми форматами — зачастую без источников.

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

В книге разобраны восемь сценариев, с которыми неизбежно придется иметь дело любому аналитику данных.

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

  • моделировать данные;
  • вычленяя пользовательские запис;
  • ориентироваться в плохо очерченных метриках;
  • извлекать данные из PDF — и многому другому;
  • подхватывать и доводить до конца незавершенные проекты;
  • в кратчайшие сроки создавать прототипы, опираясь на реальные данные.

Особое внимание уделено обработке временных рядов и данных, которые динамически обновляются в режиме реального времени. Книга проиллюстрирована подробными листингами на языке Python.

Основные библиотеки, на материале которых автор строит примеры, — Pandas и NumPy. Вооружившись этими знаниями, вы обзаведетесь внушительным портфолио — не забудьте похвастаться им на собеседовании.

 

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

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

Новинка: Нескучная робототехника

Нескучная робототехника

Книга содержит разнообразные занимательные задания, связанные с робототехникой, и способствует развитию логики, памяти, внимания у детей от 10 до 12 лет. Она поможет им содержательно провести свободное время и узнать много интересного из мира роботов.

Обучение построено как увлекательная игра: читатель начинает с получения в подарок от завода коробки с деталями для будущего робота. Решая логические задачи и головоломки, юный конструктор поэтапно развивает своего «железного питомца» — собирает ему голову, ставит на гусеницы, добавляет руки и, наконец, ноги, превращая робота в настоящего андроида. Авторские рисунки на каждом развороте создают живой и понятный мир, где робот растёт и умнеет на глазах у читателя. За верные решения читатель получает пароли для скачивания секретных файлов с бонусными заданиями, цветными иллюстрациями и историями из области робототехники.

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

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

Встречайте: Генеративный ИИ на практике: трансформеры и диффузионные модели

Генеративный ИИ на практике: трансформеры и диффузионные модели

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

Трансформеры и диффузионные модели

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

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

  • Создавайте и настраивайте модели для генерации текста и изображений.
  • Сравнивайте подходы: использование предобученной модели и дообучение собственной.
  • Создавайте и применяйте модели для генерации, редактирования и стилизации изображений.
  • Адаптируйте трансформеры и диффузионные модели для различных творческих задач.
  • Обучайте модели для отражения вашего уникального стиля.

Книгу “Генеративный ИИ на практике: трансформеры и диффузионные модели” можно купить в нашем интенет-магазине.

Отзывы о книге……………………………………………………………………………………… 11

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

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

Предварительная подготовка…………………………………………………………………………………………………… 14

Чему вы научитесь…………………………………………………………………………………………………………………….. 14

Как следует читать эту книгу…………………………………………………………………………………………………… 15

Требования к программному и аппаратному обеспечению………………………………………………….. 15

Условные обозначения, используемые в книге……………………………………………………………………….. 16

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

Комплект цветных изображений………………………………………………………………………………………………. 17

Актуальность книги…………………………………………………………………………………………………………………… 17

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

Часть I. Использование открытых моделей……………………….. 21

Глава 1. Введение в генеративные медиа……………………………………………….. 23

Генерация изображений……………………………………………………………………………………………………………. 24

Генерация текста……………………………………………………………………………………………………………………….. 26

Создание аудио………………………………………………………………………………………………………………………….. 28

Этические и социальные последствия……………………………………………………………………………………… 28

Где мы были раньше и как обстоят дела сейчас…………………………………………………………………….. 29

Как создаются генеративные ИИ-модели………………………………………………………………………………… 30

Заключение………………………………………………………………………………………………………………………………… 31

Глава 2. Трансформеры………………………………………………………………………….. 33

Языковая модель в действии…………………………………………………………………………………………………….. 34

Токенизация текста………………………………………………………………………………………………………… 34

Прогнозирование вероятностей…………………………………………………………………………………….. 37

Генерация текста……………………………………………………………………………………………………………. 40

Генерализация с нулевым выстрелом (Zero-shot)………………………………………………………… 49

Генерализация с несколькими выстрелами (Few-shot)………………………………………………… 51

Блок трансформера……………………………………………………………………………………………………………………. 53

Генеалогия модели-трансформера…………………………………………………………………………………………… 55

Задачи «последовательность-последовательность»…………………………………………………… 55

Модели, имеющие только энкодер……………………………………………………………………………….. 57

Сила предварительного обучения……………………………………………………………………………………………. 60

Краткий обзор трансформеров…………………………………………………………………………………………………. 63

Ограничения……………………………………………………………………………………………………………………. 65

Помимо текста………………………………………………………………………………………………………………… 66

Создание проекта: использование языковой модели для генерации текста………………………… 70

Заключение………………………………………………………………………………………………………………………………… 70

Вопросы……………………………………………………………………………………………………………………………………… 72

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

Глава 3. Сжатие и представление информации………………………………………. 75

Автоэнкодеры…………………………………………………………………………………………………………………………….. 77

Подготовка данных………………………………………………………………………………………………………… 78

Энкодер……………………………………………………………………………………………………………………………. 80

Декодер……………………………………………………………………………………………………………………………. 83

Обучение…………………………………………………………………………………………………………………………. 84

Исследование латентного пространства……………………………………………………………………… 89

Визуализация латентного пространства……………………………………………………………………… 93

Вариационные автоэнкодеры…………………………………………………………………………………………………… 97

Энкодеры и декодеры VAE……………………………………………………………………………………………. 98

Выборка из распределения энкодера…………………………………………………………………………… 99

Обучение VAE………………………………………………………………………………………………………………. 102

Использование VAE для генеративного моделирования………………………………………….. 110

CLIP…………………………………………………………………………………………………………………………………………… 111

Контрастные потери…………………………………………………………………………………………………….. 111

Использование CLIP, шаг за шагом……………………………………………………………………………. 113

Классификация изображений с нулевым выстрелом с помощью CLIP…………………… 118

Конвейер классификации изображений с нулевым выстрелом……………………………….. 120

Варианты использования CLIP…………………………………………………………………………………… 121

Альтернативы CLIP…………………………………………………………………………………………………………………. 122

Время проекта: семантический поиск изображений…………………………………………………………….. 122

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

Вопросы……………………………………………………………………………………………………………………………………. 125

Задачи………………………………………………………………………………………………………………………………………. 126

Глава 4. Модели диффузии…………………………………………………………………… 127

Итеративное уточнение — ключ к пониманию моделей диффузии……………………………………. 128

Обучение моделей диффузии………………………………………………………………………………………………….. 131

Данные…………………………………………………………………………………………………………………………… 132

Добавление шума…………………………………………………………………………………………………………. 134

UNet……………………………………………………………………………………………………………………………….. 135

Обучение……………………………………………………………………………………………………………………….. 137

Выборка………………………………………………………………………………………………………………………… 139

Оценка……………………………………………………………………………………………………………………………. 140

Графики шума………………………………………………………………………………………………………………………….. 142

Зачем надо добавлять шум?………………………………………………………………………………………… 143

Начинаем с простого……………………………………………………………………………………………………. 144

Математика…………………………………………………………………………………………………………………… 146

Влияние входного разрешения и масштабирования…………………………………………………. 151

Подробный разбор: UNet и альтернативы…………………………………………………………………………….. 153

Простая модель UNet……………………………………………………………………………………………………. 154

Улучшение UNet…………………………………………………………………………………………………………… 157

Альтернативные архитектуры…………………………………………………………………………………….. 158

Подробный разбор: цели диффузии……………………………………………………………………………………….. 159

Время проекта: обучение собственной модели диффузии…………………………………………………… 161

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

Вопросы……………………………………………………………………………………………………………………………………. 162

Задачи………………………………………………………………………………………………………………………………………. 163

Глава 5. Stable Diffusion и обусловленная генерация…………………………….. 165

Добавление контроля: модели с условиями………………………………………………………………………….. 165

Подготовка данных………………………………………………………………………………………………………. 166

Создание модели, обусловленной классом……………………………………………………………….. 168

Обучение модели………………………………………………………………………………………………………….. 169

Выборка………………………………………………………………………………………………………………………… 171

Повышение эффективности: Latent Diffusion………………………………………………………………………… 174

Stable Diffusion: подробнее о компонентах…………………………………………………………………………… 175

Энкодер текста……………………………………………………………………………………………………………… 176

Вариационный автоэнкодер (VAE)…………………………………………………………………………….. 178

UNet……………………………………………………………………………………………………………………………….. 181

Stable Diffusion XL………………………………………………………………………………………………………… 183

FLUX, Stable Diffusion 3 и генерация видео……………………………………………………………….. 185

Руководство без классификаторов……………………………………………………………………………… 185

Собираем все вместе: аннотированный цикл выборки………………………………………………………… 187

Открытые данные, открытые модели…………………………………………………………………………………….. 190

Закат LAION-5B……………………………………………………………………………………………………………. 191

Альтернативы……………………………………………………………………………………………………………….. 192

Добросовестное и коммерческое использование………………………………………………………. 192

Время проекта: создание интерактивной демомодели с помощью Gradio…………………………. 193

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

Вопросы……………………………………………………………………………………………………………………………………. 195

Задачи………………………………………………………………………………………………………………………………………. 195

Часть II. Перенос обучения для генеративных моделей 197

Глава 6. Тонкая настройка языковых моделей…………………………………….. 199

Классификация текста…………………………………………………………………………………………………………….. 200

Определение набора данных………………………………………………………………………………………. 201

Определение типа модели……………………………………………………………………………………………. 202

Выбор хорошей базовой модели………………………………………………………………………………… 203

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

Определение оценочных метрик…………………………………………………………………………………. 206

Обучение модели………………………………………………………………………………………………………….. 208

Все еще актуально?……………………………………………………………………………………………………… 216

Генерация текста……………………………………………………………………………………………………………………… 217

Выбор правильной генеративной модели………………………………………………………………….. 217

Обучение генеративной модели………………………………………………………………………………….. 221

Инструкции………………………………………………………………………………………………………………………………. 225

Краткое введение в адаптеры…………………………………………………………………………………………………. 230

Краткое введение в квантование……………………………………………………………………………………………. 234

Собираем все вместе……………………………………………………………………………………………………………….. 237

Более глубокое погружение в оценку…………………………………………………………………………………….. 243

Время проекта: поисково-дополненная генерация………………………………………………………………. 246

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

Вопросы……………………………………………………………………………………………………………………………………. 249

Задачи………………………………………………………………………………………………………………………………………. 249

Глава 7. Тонкая настройка Stable Diffusion…………………………………………… 251

Тонкая настройка полной модели Stable Diffusion………………………………………………………………. 251

Подготовка набора данных…………………………………………………………………………………………. 252

Тонкая настройка модели……………………………………………………………………………………………. 254

Вывод модели……………………………………………………………………………………………………………….. 257

DreamBooth………………………………………………………………………………………………………………………………. 259

Подготовка набора данных…………………………………………………………………………………………. 261

Сохранение предыдущих знаний……………………………………………………………………………….. 261

Подготовка модели с помощью DreamBooth…………………………………………………………….. 262

Вывод…………………………………………………………………………………………………………………………….. 263

Обучение LoRA………………………………………………………………………………………………………………………… 264

Предоставление для Stable Diffusion новых возможностей…………………………………………………. 267

Inpainting……………………………………………………………………………………………………………………….. 267

Дополнительные входы для специальных обусловливаний……………………………………. 267

Время проекта: самостоятельное обучение модели SDXL с помощью DreamBooth и LoRA 268

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

Вопросы……………………………………………………………………………………………………………………………………. 270

Задачи………………………………………………………………………………………………………………………………………. 270

Часть III. Двигаемся дальше…………………………………………………….. 271

Глава 8. Творческое применение моделей text-to-image………………………… 273

Преобразование изображения в изображение………………………………………………………………………. 273

Inpainting…………………………………………………………………………………………………………………………………… 275

Взвешивание промптов и редактирование изображений…………………………………………………….. 277

Взвешивание и слияние промптов………………………………………………………………………………. 277

Редактирование диффузионных изображений с помощью Semantic Guidance………. 280

Редактирование реальных изображений с помощью инверсии………………………………………….. 283

Редактирование с помощью LEDITS++………………………………………………………………………. 284

Редактирование реальных изображений с помощью тонкой настройки через инструкции      286

ControlNet…………………………………………………………………………………………………………………………………. 288

Изображения в качестве промптов и вариации изображений……………………………………………… 291

Вариации изображений……………………………………………………………………………………………….. 291

Изображения в качестве промптов……………………………………………………………………………… 293

Перенос стиля……………………………………………………………………………………………………….. 293

Дополнительный контроль………………………………………………………………………………….. 295

Время проекта: ваш творческий холст………………………………………………………………………………….. 296

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

Вопросы……………………………………………………………………………………………………………………………………. 297

Глава 9. Генерация аудио…………………………………………………………………….. 299

Аудиоданные……………………………………………………………………………………………………………………………. 301

Осциллограмма…………………………………………………………………………………………………………….. 305

Спектрограммы…………………………………………………………………………………………………………….. 306

Преобразование речи в текст с использованием архитектур на основе трансформеров…. 314

Техники на основе энкодеров……………………………………………………………………………………… 315

Техники на основе энкодер-декодера…………………………………………………………………………. 319

От модели к конвейеру…………………………………………………………………………………………………. 323

Оценка……………………………………………………………………………………………………………………………. 325

Генерация аудио……………………………………………………………………………………………………………………… 331

Генерация звука с помощью моделей Sequence-to-Sequence……………………………………. 332

Выход за рамки генерации речи с помощью Bark…………………………………………………….. 337

AudioLM и MusicLM…………………………………………………………………………………………………….. 339

AudioGen и MusicGen……………………………………………………………………………………………………. 342

Audio Diffusion и Riffusion…………………………………………………………………………………………… 343

Dance Diffusion……………………………………………………………………………………………………………… 346

Подробнее о моделях диффузии для генерации звука………………………………………………. 347

Оценка систем генерации звука……………………………………………………………………………………………… 348

Что дальше?……………………………………………………………………………………………………………………………… 348

Время проекта: сквозная диалоговая система………………………………………………………………………. 349

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

Вопросы……………………………………………………………………………………………………………………………………. 352

Задачи………………………………………………………………………………………………………………………………………. 353

Глава 10. Быстро развивающиеся направления в области
генеративного ИИ………………………………………………………………………………… 355

Оптимизация предпочтений……………………………………………………………………………………………………. 355

Длинные контексты…………………………………………………………………………………………………………………. 357

Смесь экспертов……………………………………………………………………………………………………………………….. 360

Оптимизации и квантование…………………………………………………………………………………………………… 362

Данные……………………………………………………………………………………………………………………………………… 364

Одна модель, чтобы править всеми……………………………………………………………………………………….. 365

Компьютерное зрение……………………………………………………………………………………………………………… 365

Компьютерное зрение 3D………………………………………………………………………………………………………… 368

Генерация видео………………………………………………………………………………………………………………………. 369

Мультимодальность………………………………………………………………………………………………………………… 370

Сообщество………………………………………………………………………………………………………………………………. 373

Приложение A. Инструменты с открытым исходным кодом………………… 375

Стек Hugging Face…………………………………………………………………………………………………………………….. 375

Данные……………………………………………………………………………………………………………………………………… 376

Обертки…………………………………………………………………………………………………………………………………….. 377

Локальный вывод…………………………………………………………………………………………………………………….. 377

Инструменты развертывания………………………………………………………………………………………………….. 378

Приложение B. Требования к памяти для моделей LLM………………………. 379

Требования к памяти вывода………………………………………………………………………………………………….. 379

Требования к памяти для обучения……………………………………………………………………………………….. 380

Для дополнительного чтения………………………………………………………………………………………………….. 380

Приложение C. Сквозная генерация, дополненная поиском………………… 381

Обработка данных…………………………………………………………………………………………………………………… 381

Эмбеддинги документов………………………………………………………………………………………………………….. 383

Извлечение……………………………………………………………………………………………………………………………….. 384

Генерация…………………………………………………………………………………………………………………………………. 385

RAG на уровне производства…………………………………………………………………………………………………. 387

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

Об авторах……………………………………………………………………………………………. 393

Об изображении на обложке………………………………………………………………… 395

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

Game++. Устройство и оптимизация игрового движка

Game++. Устройство и оптимизация игрового движка

Книга рассказывает о тонкостях разработки игрового движка на языке C++.  На материале компьютерных игр AAA-класса подробно разобран полный спектр работы со сложными программами на C++, способы оптимизации кода, структуры данных и их выбор для достижения максимальной производительности. Особое внимание уделено стандартной библиотеке шаблонов (STL) языка C++, многопоточной обработке, а также решению непредвиденных проблем, связанных с неопределённым поведением, поддержкой и обновлением сложнейших баз кода, а также поддержке работоспособности высоконагруженных систем.

Для программистов С++

 

Книга представляет собой сборник размышлений о языке программирования C++, алгоритмах и практиках в контексте разработки игр — о его сильных и слабых сторонах, практических решениях и устоявшихся способах работы. C++ на сегодняшний день остается основным языком в индустрии разработки игр благодаря сочетанию высокой производительности, гибкости и широкихвозможностей низкоуровневого контроля.

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

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

По сути, это не академическое исследование и не руководство к действию — это личный перечень наблюдений, пожеланий и претензий к C++. В книге описаны подходы к разработке игр, выработанные автором на основе собственного опыта. Это бесценный материал, помогающий понять, как заставить сложные высоконагруженные системы работать предсказуемо, безотказно и с приемлемой скоростью.

Ключевые темы:

  • Архитектура игровых движков
  • Работа с памятью в компьютерных играх AAA-класса и других приложениях с высокими требованиями к производительности
  • Структуры данных языка С++
  • Работа со стандартной библиотекой шаблонов C++ (STL)
  • Обработка исключений
  • Неопределённое поведение и способы его предотвращения
  • Память и аллокаторы
  • Оптимизация в C++
  • Многопоточность
  • Классические паттерны проектирования применительно к разработке игр
Кушниренко Сергей Сергеевич

Сергей Кушниренко — разработчик с более чем двадцатилетним опытом программирования и создания игр. Выпускник Национального исследовательского университета ИТМО. Начинал карьеру с разработки программного обеспечения для военно-морских тренажеров, навигационных систем и сетевых решений. Последние пятнадцать лет специализируется на разработке игр: в Electronic Arts занимался оптимизацией игр The Sims и SimCity BuildIt, в Gaijin Entertainment руководил переносом игр на платформы Nintendo Switch и Apple TV. Активно участвует в проектах с открытым исходным кодом, включая библиотеку ImSpinner и проект восстановления игры Pharaoh (1999).

Книгу “Game++. Устройство и оптимизация игрового движка” можно купить в нашем интенет-магазине.

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

Disclaimer……………………………………………………………………………………………….. 13

От автора……………………………………………………………………………………………….. 15

Отзыв…………………………………………………………………………………………………….. 17

Кому стоит прочитать эту книгу?…………………………………………………………… 19

Часть I. Основы……………………………………………………………………………….. 21

0x10. С++, движки и архитектуры………………………………………………………….. 23

Почему С++?………………………………………………………………………………………………………………………………. 23

Что такое игровой движок?……………………………………………………………………………………………………….. 24

Первый главный вопрос — зачем?…………………………………………………………………………………………… 25

Второй главный вопрос — а надо ли?…………………………………………………………………………………….. 28

Либы + cmake != движок……………………………………………………………………………………………………………. 28

Полезности…………………………………………………………………………………………………………………………………. 30

Программирование……………………………………………………………………………………………………………………. 31

Главное окно (Main window)…………………………………………………………………………………………………….. 31

Игровой цикл………………………………………………………………………………………………………………………………. 32

Пользовательский ввод……………………………………………………………………………………………………………… 32

Графика………………………………………………………………………………………………………………………………………. 34

Ресурсы……………………………………………………………………………………………………………………………………….. 35

Вывод звука………………………………………………………………………………………………………………………………… 37

Физика…………………………………………………………………………………………………………………………………………. 37

AI…………………………………………………………………………………………………………………………………………………. 38

…Behavior Trees (BT)………………………………………………………………………………………………………….. 39

…GOAP (Goal-Oriented Action Planning)…………………………………………………………………………….. 39

…FSM (Finite State Machine)………………………………………………………………………………………………. 39

…Utility AI……………………………………………………………………………………………………………………………. 40

…экзотика: HTN, ML, Neural Nets, RL……………………………………………………………………………….. 40

…pathfinding………………………………………………………………………………………………………………………… 41

…navmesh……………………………………………………………………………………………………………………………. 41

…AI — это не про “умных врагов”…………………………………………………………………………………….. 42

Скрипты и конфиги…………………………………………………………………………………………………………………….. 42

…это не про производительность и не про fps…………………………………………………………………. 43

…это про удобство и скорость разработки………………………………………………………………………. 43

…на удивление, это про безопасность……………………………………………………………………………… 43

…это про реконфигурабельность проекта в целом………………………………………………………….. 44

…это дверь для комьюнити………………………………………………………………………………………………… 44

…это — всем не угодишь……………………………………………………………………………………………………. 44

Сеть……………………………………………………………………………………………………………………………………………… 45

…синхронизация состояний………………………………………………………………………………………………. 45

…предсказание ввода и откат (rollback netcode)……………………………………………………………… 46

…интерполяция, экстраполяция, сглаживание………………………………………………………………… 46

…безопасный протокол общения………………………………………………………………………………………. 47

…шифрование (параноиками просто так не становятся)………………………………………………… 47

…репликация объектов………………………………………………………………………………………………………. 47

…логирование и отладка……………………………………………………………………………………………………. 48

…борьба с читерами…………………………………………………………………………………………………………… 48

UI…………………………………………………………………………………………………………………………………………………. 48

Tools…………………………………………………………………………………………………………………………………………….. 49

…конвертеры уровня………………………………………………………………………………………………………….. 50

…проверка ресурсов…………………………………………………………………………………………………………… 50

Архитектура……………………………………………………………………………………………………………………………….. 50

…нет архитектуры — тоже архитектура………………………………………………………………………….. 51

…godobject — тоже архитектура………………………………………………………………………………………. 51

…ECS — модно! Но…………………………………………………………………………………………………………….. 52

Игра-движок……………………………………………………………………………………………………………………………….. 52

0x11. Архитектуры игровых движков…………………………………………………….. 55

Unity (Unitary Architecture)………………………………………………………………………………………………………… 57

Big Ball of Mud……………………………………………………………………………………………………………………. 58

Unreal Engine (Layered Architecture)………………………………………………………………………………………….. 62

CryEngine (Microkernel Architecture)…………………………………………………………………………………………. 66

Dagor (Data-driven Architecture)………………………………………………………………………………………………… 70

X-Ray Engine (Monolith Architecture)………………………………………………………………………………………… 72

Godot (Modules/Services Architecture)……………………………………………………………………………………….. 76

Часть II. Оптимизации…………………………………………………………………. 79

0x20. Какие бывают оптимизации…………………………………………………………. 81

Оптимизации на уровне архитектуры (~50% прироста)………………………………………………………… 83

Оптимизации на уровне алгоритмов/структур (~30%)…………………………………………………………… 84

Оптимизации на уровне исходного кода (~10%)…………………………………………………………………….. 85

Игровые реплеи (~?%)……………………………………………………………………………………………………………….. 91

Изоляция компонентов (~5%)……………………………………………………………………………………………………. 91

Специфичные низкоуровневые оптимизации (<3%)……………………………………………………………….. 92

Все остальное (~10%)………………………………………………………………………………………………………………… 92

Тесты производительности (Benchmarks)……………………………………………………………………………….. 92

Измерения…………………………………………………………………………………………………………………………………… 94

Изменения и интуиция инженера……………………………………………………………………………………………… 95

“Горячие” функции и “бутылочные горлышки”………………………………………………………………………. 96

“Горячие” функции (Hotspots)…………………………………………………………………………………………… 97

“Бутылочное горлышко” (Bottlenecks)……………………………………………………………………………… 97

Заблуждения и мифы…………………………………………………………………………………………………………………. 99

Инструменты……………………………………………………………………………………………………………………………. 102

Теория и термины…………………………………………………………………………………………………………….. 103

История одной оптимизации…………………………………………………………………………………………………… 106

Упаковка булевых значений…………………………………………………………………………………………………… 111

Без упаковки……………………………………………………………………………………………………………………… 112

std::bitset……………………………………………………………………………………………………………………………. 114

сustom_bitset……………………………………………………………………………………………………………………… 114

Выводы……………………………………………………………………………………………………………………………………… 120

0x21. Оптимизации строк…………………………………………………………………….. 123

Пул строк (String interning)………………………………………………………………………………………………………. 123

Не совсем строки……………………………………………………………………………………………………………………… 126

Реализация xstring……………………………………………………………………………………………………………………. 129

Как использовать…………………………………………………………………………………………………………………….. 131

Влияние на архитектуру…………………………………………………………………………………………………………. 132

Идентификаторы (Identifiers)………………………………………………………………………………………………….. 133

Короткие строки (Short String Optimisation)…………………………………………………………………………… 135

Короткоживущие строки (Short Live String)…………………………………………………………………………… 137

Долгоживущие строки (Long Live String)……………………………………………………………………………….. 141

Арены строк……………………………………………………………………………………………………………………………… 142

0x22. Оптимизации массивов……………………………………………………………….. 145

Оптимизация массивов (Cooking vectors)………………………………………………………………………………. 145

Недостатки векторов……………………………………………………………………………………………………………….. 150

Фиксированный массив (Fixed array)……………………………………………………………………………………… 155

Размерность стека……………………………………………………………………………………………………………………. 159

Статический вектор (Static vector)………………………………………………………………………………………….. 160

Гибридный вектор (Hybrid vector)………………………………………………………………………………………….. 164

“Холодные” и “горячие” данные (Hot/Cold data layout)……………………………………………………….. 166

0x23. Оптимизации аллокаторов………………………………………………………….. 169

Такие разные аллокаторы (Dancing with allocators)……………………………………………………………… 169

Управление памятью (Memory management)……………………………………………………………………….. 170

Ручное управление памятью (Manual memory management)……………………………………………… 172

Подсчет ссылок (RC, References counting)…………………………………………………………………………….. 173

Автоматический подсчет ссылок (ARC)………………………………………………………………………………… 174

Уникальное владение (Unique ownership)………………………………………………………………………………. 177

Фрагментация (Fragmentation)……………………………………………………………………………………………….. 178

Внутренняя фрагментация (Internal fragmentation)………………………………………………………. 178

Внешняя фрагментация (External fragmentation)…………………………………………………………… 179

Блок, заголовок, время жизни (block, header, lifetime)…………………………………………………………… 180

Получение ресурса есть инициализация (RAII, Resource Acquisition Is Initialization)………. 181

Утечка памяти (Memory leak)…………………………………………………………………………………………………. 182

Повторное освобождение (Double free)………………………………………………………………………………….. 183

“Висячие” указатели (Dangling pointers)…………………………………………………………………………………. 184

Повреждения кучи (Heap corruption)……………………………………………………………………………………… 185

Оборонительное программирование (Defensive programming)……………………………………………. 186

Умные указатели (Smart pointers)…………………………………………………………………………………………… 187

Собственные менеджеры памяти (Custom allocators)…………………………………………………………… 187

Отложенное освобождение (Lazy destroy)…………………………………………………………………………….. 188

Выделенная область памяти (Мemory arena)……………………………………………………………………….. 189

Дескрипторы объектов (Object handle)………………………………………………………………………………….. 190

Зависимости (Dependencies)……………………………………………………………………………………………………. 191

Каскадная очистка (Cascade cleanup)……………………………………………………………………………………. 193

Гонки данных (Data race)………………………………………………………………………………………………………… 194

Память-безопасные алгоритмы (Memory-safe algorithms)…………………………………………………… 195

Внутренняя изменяемость (Interior mutability)………………………………………………………………………. 196

Регистры процессора (CPU registers)………………………………………………………………………………………. 197

Отображение памяти (Memory mapping)………………………………………………………………………………. 198

Динамическая оперативная память (DRAM, Dynamic Random Access Memory)………………. 199

Прямой доступ к памяти (DMA, Direct memory access)………………………………………………………… 199

Выравнивание (Alignment)………………………………………………………………………………………………………. 200

Жизненный цикл инструкций………………………………………………………………………………………………….. 201

Предвыборка данных (Prefetching)…………………………………………………………………………………………. 203

Стек и куча (Stack vs Heap)…………………………………………………………………………………………………….. 204

Линейный аллокатор (Linear allocator)………………………………………………………………………………….. 205

Линейный аллокатор с откатом (Step-back allocator)…………………………………………………………… 208

Фреймовый аллокатор (Frame allocator)……………………………………………………………………………….. 210

Двойной фреймовый аллокатор (Double-frame allocator)…………………………………………………….. 212

Пример несогласованного поведения…………………………………………………………………………….. 215

N-фреймовый аллокатор (N-Frame allocator)………………………………………………………………………… 217

Стековый аллокатор (Stack allocator)……………………………………………………………………………………. 218

Двойной стековый аллокатор (Double-stack allocator)…………………………………………………………. 223

Двойной стековый аллокатор с общим началом (Pointed Double-Stack Allocator)……………. 227

Тройной стековый аллокатор (Triple-stack allocator)……………………………………………………………. 229

Пул памяти (Pool allocator)……………………………………………………………………………………………………… 233

Аллокатор со списком свободных блоков (Free list allocator)………………………………………………. 238

Аллокатор со свободными блоками под разные размеры (Segregated free lists)………………… 243

Парадокс скорости vs фрагментации…………………………………………………………………………………….. 246

Аллокатор готовых объектов (Slab-allocator)……………………………………………………………………….. 246

Аллокатор методом близнецов (Buddy allocator)…………………………………………………………………. 248

Арена объектов (Region-Based allocator)……………………………………………………………………………….. 251

Аллокатор с локальным кэшем для потока (Thread-cache allocator)………………………………….. 257

Фибоначчи аллокатор (Fibonacci allocator)…………………………………………………………………………… 261

Сжимающий аллокатор (Compacting allocator)……………………………………………………………………. 264

Двухуровневый аллокатор с разделением по размерам (Two-Level Segregated Fit)………….. 267

“Цветной” аллокатор (Color-based allocator)…………………………………………………………………………. 271

Аллокатор с отслеживанием времени жизни
(TTL Allocator, Time-to-live, Tracked- time-live)……………………………………………………………………… 273

Аллокатор с агрессивной рандомизацией адресов (Chaos allocator)…………………………………. 273

Аллокаторы != “серебряная пуля”………………………………………………………………………………………….. 275

0x24. Оптимизации контейнеров………………………………………………………….. 277

Контейнеры………………………………………………………………………………………………………………………………. 277

Инвалидация итераторов………………………………………………………………………………………………………… 278

Фиксированный массив (Fixed array)……………………………………………………………………………………… 279

Матрица (Matrix)……………………………………………………………………………………………………………………… 281

Неравномерная матрица (Ragged matrix, jagged arrays)………………………………………………………. 282

Динамическая матрица (Dynamic matrix)……………………………………………………………………………… 285

Динамический массив (Dynamic array, vector)………………………………………………………………………. 286

Стабильный вектор (Stable vector)…………………………………………………………………………………………. 288

Разреженный массив (Sparse array/vector)…………………………………………………………………………….. 292

Парадокс “ленивой сортировки”…………………………………………………………………………………….. 294

Упакованный вектор (Packed vector)……………………………………………………………………………………… 294

Гибридный вектор (Small/Hybrid vector)……………………………………………………………………………….. 296

Парадокс малых размеров………………………………………………………………………………………………. 300

Массив с отложенным удалением (Dirty vector)……………………………………………………………………. 300

Массив с чередованием (Buddy array)…………………………………………………………………………………… 304

Двусторонняя очередь (Deque, Double Ended Queue)…………………………………………………………… 306

Двусторонняя очередь со сжатием (Block-compressed deque)…………………………………………….. 308

Двусторонняя очередь с приоритетами (Bounded priority deque)……………………………………….. 310

Интрузивная двусторонняя очередь/список (Intrusive deque/list)………………………………………… 313

Пополняемый массив (Expandable vector)…………………………………………………………………………….. 316

Структурированное дерево данных (LSM, Level structured merge)…………………………………….. 318

Октодерево (Octree)………………………………………………………………………………………………………………….. 320

Квадродерево (Quadtree/btree)……………………………………………………………………………………………….. 325

Кольцевой буфер (Circular buffer)…………………………………………………………………………………………… 326

Хеш-таблица с мемоизацией (Memoization hashtable)…………………………………………………………. 330

Массив дескрипторов (Handle array)……………………………………………………………………………………… 333

Текстурный атлас (Texture atlas)……………………………………………………………………………………………. 337

Слотовый массив (Slot array)………………………………………………………………………………………………….. 341

0x25. Нескучное программирование…………………………………………………….. 345

Что такое нескучное программирование (Heapless programming)………………………………………. 345

Стек (Stack)………………………………………………………………………………………………………………………………. 353

Динамическая память (Heap)………………………………………………………………………………………………….. 359

Статическая память (Static)…………………………………………………………………………………………………….. 365

Компромиссы динамических объектов………………………………………………………………………………….. 367

Детерминизм стека…………………………………………………………………………………………………………………… 369

Утечки и оптимизации…………………………………………………………………………………………………………….. 370

Не использовать new?……………………………………………………………………………………………………………… 371

Локальные строки……………………………………………………………………………………………………………………. 373

Локальный полиморфизм (Ad-hoc polymorphism)………………………………………………………………… 375

std::get_if…………………………………………………………………………………………………………………………… 376

std::visit……………………………………………………………………………………………………………………………… 377

std::variant::index……………………………………………………………………………………………………………… 378

Оптимизируем векторы……………………………………………………………………………………………………………. 379

Оптимизация тайловой карты………………………………………………………………………………………………… 386

Работа с размеченной памятью (Preallocations)……………………………………………………………………. 388

“Тяжелые” логи………………………………………………………………………………………………………………………… 392

Часть III. Библиотека C++…………………………………………………………… 397

0x30. STL и алгоритмы…………………………………………………………………………. 399

Нестандартные стандарты…………………………………………………………………………………………………….. 399

Использование SIMD………………………………………………………………………………………………………………. 402

Алгоритмы………………………………………………………………………………………………………………………………… 404

Ортогональность данных и алгоритмов………………………………………………………………………………… 407

Итераторы………………………………………………………………………………………………………………………………… 409

Кэширование шейдеров (практический пример)………………………………………………………………….. 413

Как сделать через алгоритмы?……………………………………………………………………………………….. 415

Часто используемые алгоритмы…………………………………………………………………………………………….. 415

all_of………………………………………………………………………………………………………………………………….. 416

all_of (вредные советы)……………………………………………………………………………………………………. 417

any_of………………………………………………………………………………………………………………………………… 418

any_of (вредные советы)………………………………………………………………………………………………….. 419

find, find_if, find_if_not……………………………………………………………………………………………………. 420

find (вредные советы)………………………………………………………………………………………………………. 420

adjacent_find…………………………………………………………………………………………………………………….. 422

adjacent_find (вредные советы)………………………………………………………………………………………. 423

move, move_backward……………………………………………………………………………………………………….. 424

move (вредные советы)…………………………………………………………………………………………………….. 425

copy, copy_n, copy_if, copy_backward…………………………………………………………………………….. 425

count, count_if…………………………………………………………………………………………………………………… 426

count (вредные советы)……………………………………………………………………………………………………. 426

mismatch…………………………………………………………………………………………………………………………….. 427

mismatch (вредные советы)………………………………………………………………………………………………. 428

equal………………………………………………………………………………………………………………………………….. 429

equal (вредные советы)……………………………………………………………………………………………………. 429

is_permutation…………………………………………………………………………………………………………………… 431

is_permutation (вредные советы)…………………………………………………………………………………….. 431

search, search_n………………………………………………………………………………………………………………… 433

search (вредные советы)…………………………………………………………………………………………………… 433

replace, replace_if, replace_copy, replace_copy_if…………………………………………………………. 434

replace (вредные советы)…………………………………………………………………………………………………. 435

transform……………………………………………………………………………………………………………………………. 436

transform (вредные советы)……………………………………………………………………………………………… 437

remove, remove_if, remove_copy, remove_copy_if……………………………………………………………. 438

remove (вредные советы)………………………………………………………………………………………………….. 439

unique, unique_copy…………………………………………………………………………………………………………. 439

unique (вредные советы)………………………………………………………………………………………………….. 440

fill, fill_n……………………………………………………………………………………………………………………………. 441

fill (вредные советы)………………………………………………………………………………………………………… 441

generate, generate_n…………………………………………………………………………………………………………. 442

generate (вредные советы)……………………………………………………………………………………………….. 443

sort, partial_sort………………………………………………………………………………………………………………… 443

partial_sort (вредные советы)………………………………………………………………………………………….. 445

nth_element……………………………………………………………………………………………………………………….. 446

nth_element (вредные советы)…………………………………………………………………………………………. 446

reverse, reverse_copy…………………………………………………………………………………………………………. 447

merge………………………………………………………………………………………………………………………………….. 448

merge (вредные советы)……………………………………………………………………………………………………. 449

Часть IV. Многопоточность…………………………………………………….. 451

0x40. Мультипоточное программирование…………………………………………… 453

Конкурентность (Concurrency)……………………………………………………………………………………………….. 453

Масштабируемость (Scalability)…………………………………………………………………………………………….. 454

Cоперничество за ресурс (Contention)…………………………………………………………………………………… 455

Изолированное состояние (Separate state)…………………………………………………………………………….. 456

Общее состояние (Shared state)………………………………………………………………………………………………. 457

Копия состояния (Shadow state)……………………………………………………………………………………………… 458

Работа с потоками…………………………………………………………………………………………………………………… 459

Аналогия с реальным миром…………………………………………………………………………………………… 460

Проблемы потоков…………………………………………………………………………………………………………… 461

История одного бага, или многопоточный AI, который всех победил……………………………….. 465

Неблокирующая логика………………………………………………………………………………………………….. 465

Как было до С++11?………………………………………………………………………………………………………………… 467

Неблокирующие алгоритмы (non-blocking, lock-free, wait-free)…………………………………………… 471

Зачем куда-то уходить от мьютексов?…………………………………………………………………………………… 473

Атомарные операции………………………………………………………………………………………………………………. 475

Спинлок…………………………………………………………………………………………………………………………………….. 476

“Голодание” потоков (Thread starvation)……………………………………………………………………………….. 477

Алгоритмическое “голодание”………………………………………………………………………………………… 478

Эффекты кэша…………………………………………………………………………………………………………………… 479

Хороший спинлок для игры…………………………………………………………………………………………………….. 495

Практические советы………………………………………………………………………………………………………………. 498

Задачи (Tasks)………………………………………………………………………………………………………………………….. 500

Подвисания, подтормаживания (Hitching, Stutters)……………………………………………………………….. 502

Обращение к системе ресурсов (I/O hitching)………………………………………………………………… 502

Неправильная работа с потоками (Thread hitching)……………………………………………………… 503

Сборка мусора (GC hitching)…………………………………………………………………………………………… 504

Проблемы железа (Graphics hitching/stutters)…………………………………………………………………. 504

Рабочие потоки (Workers)……………………………………………………………………………………………………….. 505

Схема “один поток на ядро”……………………………………………………………………………………………. 505

Схема “два потока на ядро”……………………………………………………………………………………………. 507

Модель независимых задач (Embarrassingly Parallel Model)………………………………………………… 508

Модель с выборкой данных (Stateless workers)……………………………………………………………………… 511

Цепочки задач (Workers chain)……………………………………………………………………………………………….. 512

Часть V. Паттерны………………………………………………………………………… 521

0x50. Паттерны разработки………………………………………………………………….. 523

Фреймворки умирают, математика не стареет……………………………………………………………………… 523

Cиняя книга………………………………………………………………………………………………………………………………. 525

Синдром фломастера………………………………………………………………………………………………………………. 527

Уровни паттернов……………………………………………………………………………………………………………………. 528

Команда (Command)……………………………………………………………………………………………………………….. 530

Недостатки……………………………………………………………………………………………………………………….. 533

Возможности для расширения………………………………………………………………………………………… 533

Совместимость…………………………………………………………………………………………………………………. 534

Плохие примеры внедрения…………………………………………………………………………………………….. 534

Состояние (State)……………………………………………………………………………………………………………………… 536

Конечный автомат (Finite State Machine)………………………………………………………………………………. 537

Детерминированный конечный автомат (Deterministic [basic] FSM)…………………………… 539

Недетерминированный конечный автомат (Nondeterministic FSM)…………………………….. 540

Автомат состояний со стеком (FSM + pushdown states)………………………………………………… 541

Конечный автомат на основе состояний (State-based/Object-model FSM)…………………. 542

Возможности для расширения………………………………………………………………………………………… 544

Влияние на архитектуру…………………………………………………………………………………………………. 545

Недостатки……………………………………………………………………………………………………………………….. 546

Плохие примеры использования…………………………………………………………………………………….. 547

Разделяемый объект / Приспособленец (Flyweight)………………………………………………………………. 549

Влияние на архитектуру…………………………………………………………………………………………………. 551

Недостатки……………………………………………………………………………………………………………………….. 552

Совместимость…………………………………………………………………………………………………………………. 553

Плохие примеры использования…………………………………………………………………………………….. 553

Наблюдатель (Observer)………………………………………………………………………………………………………….. 555

Возможности для расширения………………………………………………………………………………………… 559

Влияние на архитектуру…………………………………………………………………………………………………. 560

Недостатки……………………………………………………………………………………………………………………….. 560

Совместимость…………………………………………………………………………………………………………………. 561

Примеры плохого использования…………………………………………………………………………………… 562

Шина событий (Event bus)………………………………………………………………………………………………………. 564

Возможности для расширения………………………………………………………………………………………… 566

Влияние на архитектуру…………………………………………………………………………………………………. 567

Недостатки……………………………………………………………………………………………………………………….. 568

0x51. “Ленивая” логика……………………………………………………………………….. 569

Флаг изменения (Dirty flag)……………………………………………………………………………………………………… 569

Влияние на архитектуру…………………………………………………………………………………………………. 572

Недостатки……………………………………………………………………………………………………………………….. 572

Совместимость…………………………………………………………………………………………………………………. 573

Примеры плохого использования…………………………………………………………………………………… 574

Слой логики (Update layer)……………………………………………………………………………………………………… 576

Ближний слой (Close Layer)…………………………………………………………………………………………….. 576

Средний слой (Mid Layer)……………………………………………………………………………………………….. 577

Дальний слой (Far Layer)…………………………………………………………………………………………………. 577

“Замороженные” объекты (Frozen Layer)……………………………………………………………………….. 578

Реализация………………………………………………………………………………………………………………………… 579

Влияние на архитектуру…………………………………………………………………………………………………. 580

Недостатки……………………………………………………………………………………………………………………….. 580

Совместимость…………………………………………………………………………………………………………………. 581

Примеры плохого использования…………………………………………………………………………………… 581

Что дальше?……………………………………………………………………………………………………………………………… 583

0xFF. Игры — это искусство………………………………………………………………… 585

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

Об авторе……………………………………………………………………………………………… 591

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

Новинка: “Terraform. Сборник рецептов”

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

Практическое руководство по использованию Terraform для автоматизации облачной инфраструктуры. Книга построена по принципу сборника рецептов, где каждая задача рассматривается с объяснением «как» и «почему». Она подходит как для начинающих, помогая им освоить основы Terraform и концепции «инфраструктура как код», так и для опытных инженеров, предлагая продвинутые техники для работы с многооблачными средами, контейнерами и обеспечения защиты данных.  Основные темы: модули и провайдеры Terraform, управление контейнерами, централизованное управление через HCP Terraform и Terraform Enterprise, интеграция с CI/CD и реальные примеры развертывания на AWS, Kubernetes и других платформах.

Для начинающих и опытных DevOps-инженеров и архитекторов

Чтобы укротить хаос современной инфраструктуры, нужен современный и кардинальный  подход. Terraform даёт его. Эта книга — лучшее практическое руководство, которое превращает мощь инструмента в рабочие решения для реальных инженерных задач.
Крис Девер, технический специалист  компании EditShare

Эта книга — отличный настольный помощник, который поможет вам справиться с некоторыми сложными задачами.
Адам Макпартлан, ведущий консультант компании Hippo Digital

 

Инфраструктура как код

Облачные сервисы и SaaS-решения пронизывают ИТ-инфраструктуру каждой компании, требуя перехода от ручного управления услугами к более структурированному подходу, основанному на их описании в виде кода. Terraform предоставляет инструменты для управления жизненным циклом ИТ-инфраструктуры для тысяч различных облачных провайдеров и SaaS-платформ.

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

Если вы только начинаете работать с Terraform и концепцией «инфраструктура как код», эта книга поможет вам заложить прочную основу для дальнейшего развития. Опытный пользователь сможет структурировать знания и перейти к управлению более сложной, мультиоблачной инфраструктурой, распределенной между несколькими провайдерами.

Рассматриваются следующие вопросы:

  • Стратегии использования Terraform с системами контроля версий (например, Git)
  • Шаблоны валидации и тестирования инфраструктуры для проверки изменений
  • Методы импорта уже существующих ресурсов из облачных консолей
  • Преобразование сервисов в повторно используемые компоненты (готовые модули)
  • Интеграция Terraform с другими инструментами HashiCorp (Vault, Consul)
  • Развертывание контейнеризированных рабочих нагрузок в Kubernetes
Taylor Dolezal

Долезал Тейлор (Taylor Dolezal) руководит отделом экосистемы в Cloud Native Computing Foundation (CNCF), курируя направления развития и партнерских отношений в сфере облачных вычислений.
В своей карьере Тейлор всегда выступал связующим звеном между сложными системами и человеческим восприятием, будь то обеспечение надежности технических объектов, разработка программного обеспечения или совместная работа над инновационными технологическими решениями. Когда Тейлор не занят работой с облачными технологиями, он исследует тропы в окрестностях Лос-Анджелеса, погружается в хорошую книгу и оптимизирует свой процесс подачи каламбуров для максимальной окупаемости инвестиций.

 

 

Kerim Satirli

Сатирли Керим (Kerim Satirli) занимает позицию ведущего адвоката разработчиков в HashiCorp, где специализируется на обучении операторов и разработчиков по созданию надежной инфраструктуры и эффективным методам оркестрации.
Прежде чем присоединиться к HashiCorp, Керим занимался промышленным IoT (Industrial Internet of Things — промышленный Интернет вещей) для аэропорта Амстердама, а также помогал музеям в оцифровке и размещении в Интернете своих коллекций. В свободное время Керим наслаждается общением с дочерью, увлекается аэрофотосъемкой и печет торты.

Книгу “Terraform. Сборник рецептов” можно купить в нашем интенет-магазине.

Предисловие…………………………………………………………………………………………….. 9

Для кого предназначена эта книга?…………………………………………………………………………………………… 9

Почему была написана эта книга?…………………………………………………………………………………………… 10

Краткий обзор глав……………………………………………………………………………………………………………………. 10

О чем эта книга…………………………………………………………………………………………………………………………… 11

Условные обозначения и соглашения……………………………………………………………………………………… 11

Примеры применения кода……………………………………………………………………………………………………….. 11

Платформа онлайн-обучения O’Reilly……………………………………………………………………………………… 12

Контактная информация…………………………………………………………………………………………………………… 13

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

Глава 1. Подготовка к работе с Terraform……………………………………………… 15

1.1.   В каких случаях используется Terraform……………………………………………………………………….. 16

1.2.   В каких случаях не используется Terraform…………………………………………………………………… 17

1.3.   Установка и настройка Terraform…………………………………………………………………………………… 18

Установка Terraform в Linux……………………………………………………………………………………………. 18

Установка Terraform в macOS…………………………………………………………………………………………. 18

Установка Terraform в Windows………………………………………………………………………………………. 19

Установка OpenTofu…………………………………………………………………………………………………………. 19

1.4.   Провайдеры Terraform……………………………………………………………………………………………………… 21

1.5.   Модули Terraform…………………………………………………………………………………………………………….. 23

1.6.   Изменение состояния Terraform с помощью консоли terraform……………………………………. 24

1.7.   Применение облачной платформы HashiCorp Terraform……………………………………………… 25

1.8.   Совместное использование Terraform и Visual Studio Code………………………………………….. 27

1.9.   Управление ограничениями версий провайдеров Terraform………………………………………… 29

1.10. Алгоритм развертывания репозиториев кода с контролем версий Terraform…………….. 31

1.11. Развертывание контейнера Docker с помощью Terraform…………………………………………….. 32

1.12. Обновление Terraform: от 0.x до 1.x и выше…………………………………………………………………… 33

1.13. Использование переменных Terraform……………………………………………………………………………. 35

1.14. Консистентность кода для согласованного пользовательского опыта……………………….. 36

Глава 2. Основы Terraform……………………………………………………………………. 39

2.1.   Форматирование и проверка кода Terraform…………………………………………………………………. 39

2.2.   Быстрое тестирование с помощью консоли Terraform………………………………………………….. 40

2.3.   Повышение качества кода с помощью TFLint………………………………………………………………… 41

2.4.   Улучшение качества кода с помощью TFSec…………………………………………………………………. 42

2.5.   Проверка кода с помощью предусловий и постусловий……………………………………………….. 43

2.6.   Проверка кода с помощью Open Policy Agent…………………………………………………………………. 45

2.7.   Документирование кода с помощью terraform-docs………………………………………………………. 47

2.8.   Автоматизация проверки кода с помощью GitHub Actions…………………………………………… 49

2.9.   Обновление версии провайдера с помощью Dependabot……………………………………………… 50

2.10. Использование GitHub Codespaces и DevContainers……………………………………………………… 52

2.11. Ограничение Blast Radius с помощью Terraform……………………………………………………………. 56

Глава 3. Шаблоны синтаксиса Terraform………………………………………………. 60

3.1.   Очистка пользовательских данных с помощью trimspace…………………………………………….. 60

3.2.   Удаление префиксов и суффиксов…………………………………………………………………………………… 61

3.3.   Работа с регулярными выражениями……………………………………………………………………………… 62

3.4.   Расширенные операции со строками………………………………………………………………………………. 64

3.5.   Обработка строк с учетом регистра с помощью методов title, upper и lower………………. 65

3.6.   Сортировка списка по алфавиту……………………………………………………………………………………… 67

3.7.   Создание подсетей на основе CIDR-блока…………………………………………………………………….. 69

3.8.   Взаимодействие с локальной файловой системой…………………………………………………………. 71

3.9.   Рендеринг шаблонов…………………………………………………………………………………………………………. 73

3.10. Валидация входных строк……………………………………………………………………………………………….. 74

3.11. Эффективное извлечение данных с помощью can и try…………………………………………………. 76

3.12. Последовательная обработка входных данных……………………………………………………………. 79

3.13. Создание информативных сообщений об ошибках при некорректном вводе…………….. 82

3.14. Использование данных в различных состояниях Terraform…………………………………………. 85

Глава 4. Модули и провайдеры Terraform……………………………………………… 88

4.1.   Использование публичных модулей для создания эластичного кластера EKS…………. 88

4.2.   Линтинг Terraform с помощью GitHub Actions……………………………………………………………….. 92

4.3.   Аутентификация у провайдеров Terraform…………………………………………………………………….. 95

4.4.   Аутентификация приватных модулей…………………………………………………………………………….. 97

4.5.   Создание модуля Terraform……………………………………………………………………………………………… 99

4.6.   Управление секретами GitHub с помощью Terraform…………………………………………………. 102

4.7.   Управление репозиториями GitHub с помощью Terraform…………………………………………. 104

4.8.   Динамическая конфигурация с Consul KV……………………………………………………………………. 106

4.9.   Настройка провайдера с оповещением о работоспособности служб……………………….. 109

4.10. Использование состояния Terraform с помощью провайдеров………………………………….. 112

4.11. Использование нескольких одинаковых провайдеров………………………………………………… 114

Глава 5. Управление контейнерами с помощью Terraform………………….. 118

5.1.   Работа с локальными и удаленными образами Docker………………………………………………. 118

5.2.   Различие между развертыванием и конфигурацией кластера……………………………………. 120

5.3.   Авторизация Terraform для кластерных операций……………………………………………………… 122

5.4.   Планирование контейнеров на Kubernetes с помощью YAML…………………………………… 123

5.5.   Планирование контейнеров в Kubernetes с помощью HCL…………………………………………. 125

5.6.   Преобразование YAML Kubernetes в HCL с помощью k2tf………………………………………… 127

5.7.   Настройка аннотаций для развертывания Kubernetes………………………………………………… 128

5.8.   Настройка конфигурации развертывания Kubernetes…………………………………………………. 129

5.9.   Применение сетевых политик Kubernetes в Terraform…………………………………………………. 132

5.10. Развертывание контейнеров с помощью Helm…………………………………………………………….. 134

5.11. Мониторинг развертываний Kubernetes с помощью Helm………………………………………….. 137

5.12. Планирование контейнеров на HashiCorp Nomad………………………………………………………. 140

Глава 6. HCP Terraform и Terraform Enterprise……………………………………. 143

6.1.   Настройки HCP Terraform……………………………………………………………………………………………… 143

6.2.   Интеграция HCP Terraform с системой управления версиями (VCS)…………………………. 148

6.3.   Применение состояний Terraform в HCP Terraform…………………………………………………….. 150

6.4.   Интеграция HCP Terraform с GitHub Actions………………………………………………………………… 152

6.5.   Совместные рабочие процессы с использованием HCP Terraform……………………………. 154

6.6.   Устранение неполадок в HCP Terraform и Terraform Enterprise…………………………………. 156

6.7.   Реализация политики как кода………………………………………………………………………………………. 158

6.8.   Управление затратами с помощью HCP Terraform……………………………………………………… 160

6.9.   Использование удаленных операций для крупномасштабных развертываний……….. 163

6.10. Расширенные функции управления состоянием и восстановления……………………………. 166

Глава 7. Управление секретами при помощи Terraform………………………. 169

7.1.   Работа с конфиденциальными данными в Terraform…………………………………………………… 169

7.2.   Извлечение пар «ключ–значение» из хранилища HashiCorp Vault……………………………. 171

7.3.   Управление секретами Kubernetes с помощью нативных функций Kubernetes…………. 173

7.4.   Управление секретами Kubernetes с помощью Vault и Terraform………………………………. 176

7.5.   Хранение секретов в переменных среды………………………………………………………………………. 179

7.6.   Аудит и ротация секретов………………………………………………………………………………………………. 181

7.7.   Управление секретами в Terraform с помощью менеджеров паролей……………………….. 183

7.8.   Комплаенс и управление секретами в Terraform…………………………………………………………. 184

7.9.   Динамические секреты с помощью HashiCorp Vault…………………………………………………… 187

7.10. Обеспечение безопасности инжектирования секретов в конвейеры CI/CD………………. 189

Глава 8. Управление конфигурацией при помощи Terraform………………. 192

8.1.   Создание сценариев командной оболочки в Terraform………………………………………………. 192

8.2.   Создание конфигурации Ansible в Terraform………………………………………………………………… 194

8.3.   Динамическая конфигурация с помощью Consul KV…………………………………………………… 196

8.4.   Использование данных из HTTP-интерфейсов…………………………………………………………….. 198

8.5.   Применение условной логики в Terraform……………………………………………………………………. 199

8.6.   Импорт существующей инфраструктуры в Terraform…………………………………………………. 201

8.7.   Использование рабочих областей Terraform……………………………………………………………….. 203

8.8.   Использование шаблонов Terraform…………………………………………………………………………….. 205

8.9.   Управление зависимостями между ресурсами Terraform…………………………………………… 207

8.10. Реализация «сине-зеленых» развертываний с помощью Terraform……………………………. 209

Глава 9. Расширенные функции Terraform………………………………………….. 211

9.1.   Написание файлов конфигурации в Terraform…………………………………………………………….. 211

9.2.   Создание конфигурации Cloud-Init……………………………………………………………………………….. 213

9.3.   Внедрение модулей Terraform в конвейеры CI/CD……………………………………………………… 216

9.4.   Расширенное управление состоянием в Terraform………………………………………………………. 218

9.5.   Terraform в контексте мультиоблачных стратегий……………………………………………………… 221

9.6.   Работа в Terraform с масштабируемыми архитектурами…………………………………………… 223

9.7.   Создание пользовательских провайдеров Terraform………………………………………………….. 226

9.8.   Интеграция Terraform с инструментами мониторинга………………………………………………… 229

9.9.   Управление безопасностью и соблюдение нормативных требований в Terraform….. 234

9.10. Расширенные методы отладки в Terraform………………………………………………………………….. 238

Глава 10. Практические примеры использования………………………………… 242

10.1. Управление несколькими средами с помощью рабочих областей Terraform…………… 242

10.2. Развертывание высокодоступного веб-приложения в нескольких регионах…………….. 245

10.3. Создание масштабируемого кластера Kubernetes в AWS EKS…………………………………… 249

10.4. Реализация «сине-зеленых» развертываний с помощью Terraform……………………………. 252

10.5.   Автоматизация миграции баз данных с помощью Terraform и AWS RDS………………. 257

10.6.   Развертывание бессерверного приложения на AWS Lambda и API Gateway…………. 260

10.7.   Реализация инфраструктуры как кода для рабочих процессов GitOps…………………… 264

10.8.   Оптимизация затрат с помощью Terraform и Spot Instances…………………………………….. 267

10.9.   Развертывание системы многооблачного мониторинга с помощью Terraform………. 270

10.10. Автоматизация аварийного восстановления с помощью Terraform и AWS……………. 274

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

Об авторах……………………………………………………………………………………………. 284

Об изображении на обложке………………………………………………………………… 285

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

Счастливая земля. Сказки нивхов

Счастливая земля. Сказки нивхов

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

Эти сказки были отправлены  на V Всемирный фестиваль молодежи и студентов в Польше, где получили вторую премию и серебряную медаль (Варшава, 1955).  Сергей Феоктистов закончил Литературный институт им. А. М. Горького, но всю жизнь провел  на Дальнем Востоке и написал около полсотни об Амуре и Хабаровске, множество сказок, стихов и загадок для детей.

Для младшего школьного возраста

Счастливая земля. Сказки нивхов

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

Эти сказки были отправлены  на V Всемирный фестиваль молодежи и студентов в Польше, где получили вторую премию и серебряную медаль (Варшава, 1955).  Сергей Феоктистов закончил Литературный институт им. А. М. Горького, но всю жизнь провел  на Дальнем Востоке и написал около полсотни об Амуре и Хабаровске, множество сказок, стихов и загадок для детей.

Карта края

Счастливая земля. Сказки нивхов

Читайте сказку из книги

Художник

Творчество ульяновского художника Павла Клементьева — это мост между древними традициями и современным искусством. Его работы, наполненные славянским колоритом и этнической гармонией, дышат волшебством и мудростью предков.

Павел — художник разносторонний: он с легкостью переходит от создания целых миров в театре к тонкой и деликатной работе над книжными иллюстрациями, как в сборнике «Счастливая земля. Сказки Нивхов». Его искусство не просто радует глаз — оно рассказывает истории, с которыми хочется оставаться надолго.

Сказки народов России

Россия — большая и загадочная страна. В ней проживает около 147 млн человек. Она простирается от Европы и до Аляски.
В каждом регионе здесь свои сказки. И мы хотим познакомить с ними российских детей.
Каждую книгу мы снабжаем картой и предисловием, чтобы объяснить ребенку, о какой части России идет речь — о заснеженной Сибири, о ветреном побережье Тихого океана или о жарких степях Калмыкии? И в каждой книге собраны веселые, увлекательные, а иногда и пугающие сказки, прекрасно проиллюстрированные современными российскими художниками.

Сказки народов России

 

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

Супербестселлер! “SQL. Курс молодого бойца”

SQL. Курс молодого бойца

Изложены основы работы с реляционными базами данных и практическое применение SQL в наиболее востребованных сценариях. Рассмотрены принципы хранения данных, структура таблиц и методы извлечения информации. Подробно описаны операции выборки, фильтрации, сортировки, группировки и агрегации, работа с текстовыми и числовыми данными, обработка дат, использование выражений и условий. Последовательно разобраны механизмы соединения таблиц, особенности различных типов JOIN и способы объединения выборок. Описано создание и изменение таблиц, настройка ограничений, индексов и автоинкрементных полей, а также принципы добавления, обновления и удаления данных. Приведена справочная информация о типах данных, порядке выполнения запросов, планах и статистике, транзакциях и требованиях ACID, а также основах клиент-серверной архитектуры.

Для начинающих специалистов по работе с данными, тестировщиков ПО и специалистов технической поддержки

От автора бестселлера «Что такое тестирование. Курс молодого бойца»

Ольга Назина —  автора бестселлера
«Что такое тестирование. Курс молодого бойца»!

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

Художники

Об авторе

 

Назина Ольга

Ольга Назина — генеральный директор обучающего центра ООО «Тестбейз». Тестировщик, тренер и писатель. Автор статей на «Хабре» и бесплатных уроков на YouTube. Создала порталы Багред («Главред» для тестировщиков) и Testbase, на котором собраны полезные материалы по тестированию. Проработала в тестировании 17 лет, 10 из которых активно учила новичков. Провела более 200 курсов для тестировщиков, материал которых послужил основой для этой книги.

Книгу “SQL. Курс молодого бойца” можно купить в нашем интенет-магазине.

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

Новинка: “Искусство визуализации в бизнесе. Как представить сложную информацию простыми способами. 2-е издание”

Искусство визуализации в бизнесе. Как представить сложную информацию простыми способами. 2-е издание

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

Во второе издание включены новые главы по анализу данных и интерактивной графике, добавлены современные примеры визуализаций, полностью переработан код и инструменты с использованием R, Python и JavaScript, сделан акцент на осмысленные и эффективные визуализации с фокусом на ясность и цель.

Для широкого круга пользователей

Научись создавать визуализации, которые превращают данные в осмысленные истории

Создание  визуализаций — это, прежде всего, работа с данными, иногда огромного  объема.

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

Вы узнаете:

  • Как использовать R, Python, Excel и JavaScript для создания визуализаций, которые привлекают внимание и точно передают информацию
  • Как выделять аномалии, находить закономерности в данных, создавать информативные карты и многое другое
  • Как на реальных примерах и практических заданиях прокачать навыки работы с данными

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

  • Визуализировать данные так, чтобы аудитория увидела неочевидное
  • Находить истории, скрытые в цифрах
  • Исследовать источники данных и выбирать оптимальные форматы для их представления
  • Экспериментировать с инструментами визуализации и сравнивать их
  • Выявлять тренды и паттерны, подбирая подходящие типы графиков
  • Ставить четкие цели для своих визуализаций

Книгу “Искусство визуализации в бизнесе. Как представить сложную информацию простыми способами. 2-е издание” можно купить в нашем интенет-магазине.

Об авторе……………………………………………………………………………………………….. 12

О техническом редакторе……………………………………………………………………….. 13

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

Введение………………………………………………………………………………………………… 15

Изучение визуализации данных……………………………………………………………………………………………….. 16

Как пользоваться этой книгой………………………………………………………………………………………………….. 17

Глава 1. Данные рассказывают истории………………………………………………… 19

Больше, чем просто числа………………………………………………………………………………………………………… 21

Информативность статистики……………………………………………………………………………………….. 22

Развлечение…………………………………………………………………………………………………………………….. 24

Эмоциональность…………………………………………………………………………………………………………… 25

Увлекательность…………………………………………………………………………………………………………….. 27

Задавайте вопросы о данных…………………………………………………………………………………………………… 28

Верификация данных……………………………………………………………………………………………………… 30

Исследование………………………………………………………………………………………………………………….. 31

Коммуникация………………………………………………………………………………………………………………… 32

Дизайн…………………………………………………………………………………………………………………………………………. 34

Цель………………………………………………………………………………………………………………………………….. 35

Аудитория……………………………………………………………………………………………………………………….. 37

Устройства………………………………………………………………………………………………………………………. 37

Ясность и информативность………………………………………………………………………………………….. 38

Компромиссы………………………………………………………………………………………………………………….. 39

Итоги…………………………………………………………………………………………………………………………………………… 40

Глава 2. Выбор инструмента визуализации данных………………………………. 41

Смешанный набор инструментов…………………………………………………………………………………………….. 43

Визуализация point-and-click……………………………………………………………………………………………………. 44

Варианты………………………………………………………………………………………………………………………… 44

Microsoft Excel………………………………………………………………………………………………………… 44

Google Sheets…………………………………………………………………………………………………………… 46

Tableau…………………………………………………………………………………………………………………….. 48

Looker Studio…………………………………………………………………………………………………………… 49

Power BI…………………………………………………………………………………………………………………… 49

Datawrapper…………………………………………………………………………………………………………….. 50

Flourish…………………………………………………………………………………………………………………….. 51

RAWGraphs……………………………………………………………………………………………………………… 52

Компромиссы………………………………………………………………………………………………………………….. 53

Программирование……………………………………………………………………………………………………………………. 53

Варианты………………………………………………………………………………………………………………………… 54

R……………………………………………………………………………………………………………………………….. 54

Python………………………………………………………………………………………………………………………. 57

Processing…………………………………………………………………………………………………………………. 59

HTML, CSS и JavaScript…………………………………………………………………………………………. 60

MATLAB…………………………………………………………………………………………………………………. 62

Компромиссы………………………………………………………………………………………………………………….. 63

Создание карт…………………………………………………………………………………………………………………………….. 63

Варианты………………………………………………………………………………………………………………………… 64

ArcGIS……………………………………………………………………………………………………………………… 64

QGIS…………………………………………………………………………………………………………………………. 65

Mapbox……………………………………………………………………………………………………………………. 65

Google Карты и Bing Карты…………………………………………………………………………………… 66

Компромиссы………………………………………………………………………………………………………………….. 67

Иллюстрации……………………………………………………………………………………………………………………………… 68

Варианты………………………………………………………………………………………………………………………… 69

Adobe Illustrator………………………………………………………………………………………………………. 70

Affinity Designer………………………………………………………………………………………………………. 71

Inkscape…………………………………………………………………………………………………………………… 72

Компромиссы………………………………………………………………………………………………………………….. 72

Небольшие инструменты для визуализации…………………………………………………………………………… 72

Варианты………………………………………………………………………………………………………………………… 72

ColorBrewer……………………………………………………………………………………………………………… 73

Chroma.js Color Palette Helper……………………………………………………………………………….. 74

Sip…………………………………………………………………………………………………………………………….. 75

Sim Daltonism………………………………………………………………………………………………………….. 75

TwoTone………………………………………………………………………………………………………………….. 76

Data Viz Project……………………………………………………………………………………………………….. 76

FastCharts………………………………………………………………………………………………………………… 78

Компромиссы………………………………………………………………………………………………………………….. 78

Бумага и карандаш……………………………………………………………………………………………………………………. 79

Компромиссы………………………………………………………………………………………………………………….. 79

Изучите все доступные варианты…………………………………………………………………………………………….. 79

Итоги…………………………………………………………………………………………………………………………………………… 81

Глава 3. Работа с данными…………………………………………………………………….. 83

Подготовка данных……………………………………………………………………………………………………………………. 85

Поиск данных…………………………………………………………………………………………………………………………….. 85

Поисковые системы………………………………………………………………………………………………………… 86

Общие приложения для работы с данными…………………………………………………………………. 86

Исследователи………………………………………………………………………………………………………………… 87

Правительственные структуры……………………………………………………………………………………… 87

Каталоги и списки………………………………………………………………………………………………………….. 88

Тематические ссылки……………………………………………………………………………………………………… 88

География……………………………………………………………………………………………………………….. 88

Спорт……………………………………………………………………………………………………………………….. 89

Данные со всего мира…………………………………………………………………………………………….. 89

Политика…………………………………………………………………………………………………………………. 90

Сбор данных………………………………………………………………………………………………………………………………. 90

Копирование и вставка………………………………………………………………………………………………….. 90

Ручной сбор данных………………………………………………………………………………………………………. 92

Скрапинг………………………………………………………………………………………………………………………….. 92

Скрапинг веб-сайта………………………………………………………………………………………………………… 93

Загрузка данных………………………………………………………………………………………………………………………… 99

Форматирование данных………………………………………………………………………………………………………… 100

Форматы данных………………………………………………………………………………………………………….. 100

Электронные таблицы…………………………………………………………………………………………. 100

Текст с разделителями…………………………………………………………………………………………. 101

Текст фиксированной ширины……………………………………………………………………………. 101

JSON………………………………………………………………………………………………………………………. 102

XML……………………………………………………………………………………………………………………….. 102

Shape-файл……………………………………………………………………………………………………………. 103

Инструменты форматирования…………………………………………………………………………………… 104

Приложения для работы с электронными таблицами………………………………………. 104

OpenRefine…………………………………………………………………………………………………………….. 104

Tabula……………………………………………………………………………………………………………………. 105

Mr. Data Converter………………………………………………………………………………………………… 105

Форматирование с помощью программного кода…………………………………………………….. 106

Переключение между форматами данных…………………………………………………………. 107

Обработка данных…………………………………………………………………………………………………………………… 112

Фильтрация и агрегирование выборочных данных……………………………………………………………… 112

Итоги…………………………………………………………………………………………………………………………………………. 114

Глава 4. Визуализация времени……………………………………………………………. 117

Тренды………………………………………………………………………………………………………………………………………. 119

Столбчатая диаграмма с данными времени………………………………………………………………. 120

Создание столбчатой диаграммы………………………………………………………………………. 122

Линейный график………………………………………………………………………………………………………….. 126

Создание линейного графика………………………………………………………………………………………. 127

Ступенчатый график……………………………………………………………………………………………………. 131

Создание ступенчатого графика…………………………………………………………………………………. 132

Сглаживание…………………………………………………………………………………………………………………. 136

Создание графика с помощью сплайна……………………………………………………………………… 136

События……………………………………………………………………………………………………………………………………. 139

Временнáя шкала…………………………………………………………………………………………………………. 141

Создание временнóй шкалы………………………………………………………………………………………… 141

Точечный график………………………………………………………………………………………………………….. 145

Создание точечного графика………………………………………………………………………………………. 145

Редактирование……………………………………………………………………………………………………. 151

Циклы………………………………………………………………………………………………………………………………………… 158

Мультилинейный график…………………………………………………………………………………………….. 158

Создание мультилинейного графика………………………………………………………………………….. 159

Редактирование……………………………………………………………………………………………………. 164

Тепловая карта……………………………………………………………………………………………………………… 164

Создание тепловой карты……………………………………………………………………………………………. 165

Редактирование……………………………………………………………………………………………………. 166

Итоги…………………………………………………………………………………………………………………………………………. 168

Глава 5. Визуализация категориальных данных………………………………….. 169

Суммы……………………………………………………………………………………………………………………………………….. 171

Столбчатая диаграмма для категориальных данных………………………………………………. 173

Создание столбчатой диаграммы для категориальных данных……………………………… 173

Редактирование диаграммы………………………………………………………………………………………… 176

Масштабируемые символы…………………………………………………………………………………………. 179

Использование масштабируемых символов………………………………………………………………. 180

Редактирование диаграммы………………………………………………………………………………………… 185

Части целого…………………………………………………………………………………………………………………………….. 188

Круговая диаграмма…………………………………………………………………………………………………….. 189

Создание круговой диаграммы…………………………………………………………………………………… 191

Кольцевая диаграмма………………………………………………………………………………………………….. 195

Создание кольцевой диаграммы…………………………………………………………………………………. 195

Вафельная диаграмма………………………………………………………………………………………………….. 196

Создание вафельной диаграммы………………………………………………………………………………… 197

Древовидная карта……………………………………………………………………………………………………….. 199

Создание древовидной карты……………………………………………………………………………………… 200

Редактирование диаграммы………………………………………………………………………………………… 202

Ранжирование и упорядочивание………………………………………………………………………………………….. 203

Категории и время……………………………………………………………………………………………………………………. 206

Составная столбчатая диаграмма……………………………………………………………………………… 206

Создание составной столбчатой диаграммы…………………………………………………………….. 208

Форматирование данных…………………………………………………………………………………………….. 208

Создание диаграммы……………………………………………………………………………………………………. 210

Диаграмма суммированных областей……………………………………………………………………….. 212

Создание диаграммы суммированных областей………………………………………………………. 213

Аллювиальная диаграмма…………………………………………………………………………………………… 214

Создание аллювиальной диаграммы…………………………………………………………………………. 215

Бампчарт……………………………………………………………………………………………………………………….. 217

Итоги…………………………………………………………………………………………………………………………………………. 219

Глава 6. Визуализация взаимосвязей……………………………………………………. 221

Корреляция………………………………………………………………………………………………………………………………. 223

Диаграмма рассеяния…………………………………………………………………………………………………… 225

Создание диаграммы рассеяния…………………………………………………………………………………. 225

HTML для создания структуры………………………………………………………………………….. 227

JavaScript для разработки……………………………………………………………………………………. 228

CSS для настройки стилей…………………………………………………………………………………… 235

Пузырьковая диаграмма………………………………………………………………………………………………. 236

Создание пузырьковой диаграммы…………………………………………………………………………….. 237

Отличия в данных……………………………………………………………………………………………………………………. 241

Диаграмма гантелей…………………………………………………………………………………………………….. 242

Созданием диаграммы гантелей…………………………………………………………………………………. 243

Диаграмма различий……………………………………………………………………………………………………. 246

Создание диаграммы различий…………………………………………………………………………………… 248

Выделение различий……………………………………………………………………………………………………. 251

Множество переменных………………………………………………………………………………………………………….. 253

Тепловая карта для множества переменных……………………………………………………………… 254

Создание тепловой карты для множества переменных……………………………………………. 255

Диаграмма с параллельными координатами…………………………………………………………….. 258

Создание диаграммы с параллельными координатами…………………………………………… 259

Раздельные представления………………………………………………………………………………………….. 264

Взаимосвязи……………………………………………………………………………………………………………………………… 264

Сетевая диаграмма………………………………………………………………………………………………………. 265

Создание сетевой диаграммы……………………………………………………………………………………… 266

Итоги…………………………………………………………………………………………………………………………………………. 270

Глава 7. Визуализация пространственных данных………………………………. 271

Работа с пространственными данными…………………………………………………………………………………. 273

Геокодирование адресов……………………………………………………………………………………………… 273

Картографическая проекция……………………………………………………………………………………….. 274

Местоположение……………………………………………………………………………………………………………………… 276

Точки……………………………………………………………………………………………………………………………… 278

Картографирование с помощью точек……………………………………………………………………….. 279

Масштабируемые символы…………………………………………………………………………………………. 284

Добавление масштабируемых символов……………………………………………………………………. 284

Линии…………………………………………………………………………………………………………………………….. 288

Добавление линий………………………………………………………………………………………………………… 288

Пространственное распределение…………………………………………………………………………………………. 292

Хороплет……………………………………………………………………………………………………………………….. 293

Создание хороплета…………………………………………………………………………………………………….. 296

Картограмма…………………………………………………………………………………………………………………. 301

Создание картограммы………………………………………………………………………………………………… 302

Точечная карта плотности распределения………………………………………………………………… 304

Создание точечной карты плотности распределения………………………………………………. 306

Пространство и время……………………………………………………………………………………………………………… 309

Серии карт…………………………………………………………………………………………………………………….. 310

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

Добавление аннотации………………………………………………………………………………………… 312

Анимированная карта………………………………………………………………………………………………….. 313

Создание анимированной карты………………………………………………………………………………… 316

Итоги…………………………………………………………………………………………………………………………………………. 318

Глава 8. Визуальный анализ данных……………………………………………………. 321

Сбор информации……………………………………………………………………………………………………………………. 323

Краткие обзоры……………………………………………………………………………………………………………………….. 323

Сводная статистика……………………………………………………………………………………………………… 324

Создание коробчатой диаграммы………………………………………………………………………………. 328

Распределение………………………………………………………………………………………………………………. 333

Создание гистограммы………………………………………………………………………………………………… 336

Создание графика распределения………………………………………………………………………………. 340

Создание диаграммы типа «пчелиный рой»………………………………………………………………. 343

Качество данных………………………………………………………………………………………………………….. 348

Корректировка вопросов……………………………………………………………………………………………… 349

Подробное исследование данных………………………………………………………………………………………….. 349

Сравнение……………………………………………………………………………………………………………………… 350

Закономерности……………………………………………………………………………………………………………. 352

Неопределенность………………………………………………………………………………………………………… 354

Выбросы………………………………………………………………………………………………………………………… 358

Логические выводы………………………………………………………………………………………………………………….. 363

Итоги…………………………………………………………………………………………………………………………………………. 364

Глава 9. Осознанное проектирование…………………………………………………… 365

Хорошая визуализация……………………………………………………………………………………………………………. 367

Безграничные варианты………………………………………………………………………………………………. 368

Компоненты визуализации………………………………………………………………………………………….. 368

Демонстрация полученных прогнозов…………………………………………………………………………………… 371

Визуальная иерархия…………………………………………………………………………………………………… 371

Эстетика………………………………………………………………………………………………………………………… 371

Визуальные метафоры…………………………………………………………………………………………………. 374

Аннотация……………………………………………………………………………………………………………………… 376

Доступность………………………………………………………………………………………………………………….. 378

Итоги…………………………………………………………………………………………………………………………………………. 379

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

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

Встречайте: “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