От издательства....16
Глава 1. Программирование в условиях стресса....17
Введение....17
Почему Python?....18
Об авторе....19
О переводчике....19
Всего я не знаю, а что знаю – весьма спорно....20
Заметка о LeanPub....20
Сопроводительные материалы....20
Прифронтовые инструменты и технический долг....21
Так почему мы продолжаем это делать?....22
Первым делом проект....23
Глава 2. Взаимодействие и коммуникация....24
Подготовка к задаче....24
Уточнения и пояснения....24
Планирование....25
Упражнения....25
Задание 1....26
Задание 2....27
Задание 3....30
Задание 4....31
Задание 5....33
Управление рабочей нагрузкой....34
Взаимодействие и коммуникация....35
Знайте свою меру....35
Нет – на все случаи ответ!....36
Обратная связь....37
Просто получите обратную связь....37
Так как же получить эту обратную связь?....38
Контроль за рабочим процессом....38
Синдром самозванца....41
Глава 3. Структура....43
Управление окружениями при помощи Rez....43
Почему Rez?....44
Настройка Rez....44
Что такое Rez?....44
AllzparkBleeding-rez....44
Установка Rez....45
Создание файла конфигурации....46
Rez на Windows....47
Установка внешних пакетов....48
Компилирование внешних пакетов....49
Исправление для PySide....49
Добавление других версий Python....49
Разрешение зависимостей в окружении....50
Создание пользовательских пакетов....51
package.py....51
Зависимости....51
Команды....52
Тесты....52
build.py....52
Релиз....54
Релиз, подготовка и разработка....54
Эфемерные пакеты....55
Обеспечение корректной работы зависимостей, включенных в DCC....55
Упражнения....56
Задание 1....56
Задание 2....56
Задание 3....56
Структурирование проектов....57
Все приватное, пока не понадобится....57
Что должно находиться в публичном API....58
Обособление кода....58
Создание поддерживаемых API....59
Один файл – один класс....60
Используйте понятные имена файлов....61
Используйте типизацию везде, где это возможно....62
Абстрактные интерфейсы....63
Когда не стоит использовать интерфейсы....65
Структуры данных....65
Упражнение....67
Декораторы....71
Упражнения....73
Прочие советы....75
Стек и рекурсия....75
Кросс-платформенная разработка....77
Использование схем....77
Когда стоит использовать схемы?....78
Примеры использования схем....78
Jsonschema....78
Defs и Ref....85
JSON5....86
Версионирование схем....87
Разработка при помощи диаграмм....88
Структурные диаграммы....88
Упражнения....90
Диаграммы потоков....90
Упражнения....91
Создание поддерживаемых пайплайнов....92
Компромисс, связанный с гибкостью....92
Рукопожатие данных....93
Узлы и данные....93
Реорганизация схемы....94
Рефакторинг....96
Перед началом рефакторинга....96
Примеры....96
Исключения....98
Поиск использования....98
Регрессионные тесты....99
По окончании рефакторинга....99
Поддержка конкурирующих API....100
Набор полезных библиотек....102
Встроенные библиотеки....102
pathlib....102
dataclasses....102
itertools....103
collections....103
functools....103
Структуры....103
attrs....103
box....103
PyDantic....104
Алгоритмы....104
numpy....104
pandas....104
matplotlib....104
Форматы....105
jsonschema....105
pyYAML....105
pyjson5....105
Глава 4. Тестирование....106
Автоматизированное тестирование....106
Типы тестирования....106
Модульныеинтеграционные тесты....106
Регрессионные тесты....107
Тесты взаимодействия....107
Сквозные, или циклические, тесты....107
Написание тестов....107
Советы по подготовке и написанию тестов....108
Простой пример с использованием модуля unittest....108
Простой пример с использованием модуля pytest....109
Файл conftest.py....110
Плагины pytest....110
Разработка на основе тестирования....110
Управляемые тесты....111
Глава 5. Данные в рабочей среде....113
Контроль за данными....113
Схема – наше все....113
Балансировка нагрузки....114
Пагинация....114
Отслеживание источников....115
Бережно относитесь к ключам API....116
FlowShotgrid....117
API....117
Сущности....118
Схема....118
Оптимизация....120
FTrack....123
API....123
Сущности....124
Схема....124
Оптимизация....126
Kitsu....127
Локальная установка....127
API....128
Предварительное кеширование....129
Codecks....130
Python API....131
Jira....135
Обертки API....139
Когда не стоит применять обертки API....140
Написание обертки API....141
Структуры....142
Бэкенд....143
Адаптеры....143
Клиент....146
Глава 6. Отладка....148
Интерактивный отладчик PDB....148
Расширение отладчика PDB....150
Исключения....154
Инспекция....156
Отслеживание объектов....156
Инспекция с помощью QEventLoop....159
QObject....160
Аварийное завершение....162
Логирование....165
Процесс логирования....165
Как должен выглядеть лог?....166
Глава 7. Оптимизация....170
Профилирование....171
cProfile....171
LineProfiler....173
Дизассемблер....174
Оптимизация....175
Кеширование....176
Упражнения....177
Многопоточность....178
Простой пример с потоками....178
Простой асинхронный пример с потоками....180
asyncio....181
Порядок выполнения операций....184
Многопроцессорная обработка....190
Глава 8. Qt....195
Общий обзор....195
Не Qt единым....195
Советы по применению....196
Метаданные....197
Структура метаданных....198
Исследование данных....199
Как это использовать?....202
Стили и рисование....203
Стили Qt....203
Согласующиеся со стилем виджеты....205
Цветовые различия....205
QStylePainter....207
Таблицы стилей....209
HTML....214
Конечные автоматы....216
Что такое конечные автоматы?....216
Структура конечных автоматов....216
Анимация....218
Конечный автомат с именованными состояниями....221
SCXML....224
Отзывчивый интерфейс пользователя....228
Асинхронность....230
Способы реализации асинхронного выполнения кода....230
Какой код можно сделать асинхронным....231
Qt против встроенной асинхронности....232
Многопоточный интерфейс пользователя....232
Сетевые запросы....234
Информативность....236
Индикаторы прогресса....237
Многопроцессность....239
Индикация состояния....240
Адаптивность....243
Интерфейс, управляемый данными....246
Делегаты....247
Редактируемые делегаты....247
Графические делегаты....248
Использование делегатов....249
Подробнее о делегатах....252
Мапперы данных....255
Тестирование....257
pytest-qt....257
Перед началом тестирования....257
Цикл событий....258
Ожидание....258
Таймеры....259
Виджет для тестирования....260
Написание тестов....262
Фикстуры....262
Исходное состояние....263
Ваш первый тест в Qt....263
Сквозные тесты....264
Управляемые тесты....267
QML в DCC....272
Стилизация....272
Встраивание....275
QML в QWidget....275
QWidget в QML....276
Глава 9. Взаимодействие с пользователем....280
Что такое взаимодействие с пользователем?....280
Пять компонентов взаимодействия с пользователем....282
Стратегия....283
Наполнение....284
Структура....285
Скелет приложения....286
Интерфейс пользователя....287
Исследование....288
Каркасное моделирование....289
Пример....290
Прототипирование....292
Бумажные прототипы....292
Макеты....293
Порядок и важность....294
Порядок расположения виджетов....296
Пространство и расположение....302
Представления данных....307
Советы по сокращению отображаемых данных....310
Анимации....314
Когда стоит использовать анимацию?....314
Обеспечение общедоступности....315
Цвет....316
Макеты....316
Иконки....319
Ключ к успеху – единообразие....320
Где взять иконки?....321
Не заставляйте пользователя думать....324
Модель мышления....324
Упрощение интерфейса пользователя....324
Постепенное раскрытие....325
Главное – предсказуемость....325
Угадываем и проверяем....327
Не заставляйте пользователя ждать....329
Асинхронный интерфейс пользователя....330
Перенос запросов в отдельный поток....330
Циклы событий для отзывчивости интерфейса пользователя....330
Запуск в отдельном процессе....331
Информирование пользователя....332
Индикаторы прогресса....332
Вращающийся индикатор....332
Курсор ожидания....333
Мониторинг внешних процессов....333
Сделаем вид, что все работает, потом проверим....334
Оптимистичные обновления интерфейса пользователя....334
Ленивая загрузка и пагинация....335
Резервные сценарии в коде....335
Что такое резервные сценарии?....336
Упражнения....336
Что с этим можно сделать?....337
Наиболее важный резервный сценарий....338
Как протестировать резервные сценарии?....338
Дополнительная литература....339
Глава 10. Искусственный интеллект....340
Искусственный интеллект на службе студий....341
Порталы искусственного интеллекта....342
OpenRouter....342
Ollama....343
Терминология....343
Искусственный интеллект (ИИ)....343
Большая языковая модель (LLM)....343
Машинное обучение (ML)....344
Векторное хранилище эмбеддинги....344
Анализ главных компонент (PCA)....345
Агенты....345
Инструменты....345
Поисково-дополненная генерация (RAG)....345
Протокол контекста модели (MCP)....346
Длина контекста....346
Температура....346
Безопасность данных....347
Выбор большой языковой модели....347
Ограничения памяти....348
Квантование....349
Дообучение....349
С чего начать?....350
Промпт-инжиниринг....350
Шаблоны промптов....351
Чем проще, тем лучше....352
Структура промпта....352
Адаптирование промптов под большую языковую модель....356
Вредоносное внедрение промптов....357
Локальный запуск....359
Локальные модели....359
Установка Ollama....359
vLLM....361
Локальные ИИ-приложения....362
Anything LLM....362
LM Studio....363
OpenWebUI....363
Премиумные модели, развернутые на собственной инфраструктуре....364
Разработка с ИИ в качестве помощника....365
Вы – разработчик....367
ИИ-редакторы кода....367
Copilot....369
Continue.dev....374
Cline....378
Извлечение максимума пользы из ИИ....386
Структура....386
Автономные ИИ-разработчики....402
Вайб-кодинг?....404
Пример создания генератора диаграмм при помощи вайб-кодинга....405
Разработка ИИ-инструментов....409
Типы ИИ-инструментов....411
API....412
Простой пример....412
Простой агент....416
MCP-серверы....426
Глава 11. Важная информация....428
Юридические лицензии....428
Открытый исходный код ! бесплатный....428
Лицензия GPL....429
Кому какое дело?....430
Дополнительная информация....431
Ссылки....431
Заключение....435
Заключение....435
Предметный указатель....436
Предметный указатель....436
Разработка....-1
От издательства....16
Глава 1. Программирование в условиях стресса....17
Введение....17
Почему Python?....18
Об авторе....19
О переводчике....19
Всего я не знаю, а что знаю – весьма спорно....20
Заметка о LeanPub....20
Сопроводительные материалы....20
Прифронтовые инструменты и технический долг....21
Так почему мы продолжаем это делать?....22
Первым делом проект....23
Глава 2. Взаимодействие и коммуникация....24
Подготовка к задаче....24
Уточнения и пояснения....24
Планирование....25
Упражнения....25
Задание 1....26
Задание 2....27
Задание 3....30
Задание 4....31
Задание 5....33
Управление рабочей нагрузкой....34
Взаимодействие и коммуникация....35
Знайте свою меру....35
Нет – на все случаи ответ!....36
Обратная связь....37
Просто получите обратную связь....37
Так как же получить эту обратную связь?....38
Контроль за рабочим процессом....38
Синдром самозванца....41
Глава 3. Структура....43
Управление окружениями при помощи Rez....43
Почему Rez?....44
Настройка Rez....44
Что такое Rez?....44
AllzparkBleeding-rez....44
Установка Rez....45
Создание файла конфигурации....46
Rez на Windows....47
Установка внешних пакетов....48
Компилирование внешних пакетов....49
Исправление для PySide....49
Добавление других версий Python....49
Разрешение зависимостей в окружении....50
Создание пользовательских пакетов....51
package.py....51
Зависимости....51
Команды....52
Тесты....52
build.py....52
Релиз....54
Релиз, подготовка и разработка....54
Эфемерные пакеты....55
Обеспечение корректной работы зависимостей, включенных в DCC....55
Упражнения....56
Задание 1....56
Задание 2....56
Задание 3....56
Структурирование проектов....57
Все приватное, пока не понадобится....57
Что должно находиться в публичном API....58
Обособление кода....58
Создание поддерживаемых API....59
Один файл – один класс....60
Используйте понятные имена файлов....61
Используйте типизацию везде, где это возможно....62
Абстрактные интерфейсы....63
Когда не стоит использовать интерфейсы....65
Структуры данных....65
Упражнение....67
Декораторы....71
Упражнения....73
Прочие советы....75
Стек и рекурсия....75
Кросс-платформенная разработка....77
Использование схем....77
Когда стоит использовать схемы?....78
Примеры использования схем....78
Jsonschema....78
Defs и Ref....85
JSON5....86
Версионирование схем....87
Разработка при помощи диаграмм....88
Структурные диаграммы....88
Упражнения....90
Диаграммы потоков....90
Упражнения....91
Создание поддерживаемых пайплайнов....92
Компромисс, связанный с гибкостью....92
Рукопожатие данных....93
Узлы и данные....93
Реорганизация схемы....94
Рефакторинг....96
Перед началом рефакторинга....96
Примеры....96
Исключения....98
Поиск использования....98
Регрессионные тесты....99
По окончании рефакторинга....99
Поддержка конкурирующих API....100
Набор полезных библиотек....102
Встроенные библиотеки....102
pathlib....102
dataclasses....102
itertools....103
collections....103
functools....103
Структуры....103
attrs....103
box....103
PyDantic....104
Алгоритмы....104
numpy....104
pandas....104
matplotlib....104
Форматы....105
jsonschema....105
pyYAML....105
pyjson5....105
Глава 4. Тестирование....106
Автоматизированное тестирование....106
Типы тестирования....106
Модульныеинтеграционные тесты....106
Регрессионные тесты....107
Тесты взаимодействия....107
Сквозные, или циклические, тесты....107
Написание тестов....107
Советы по подготовке и написанию тестов....108
Простой пример с использованием модуля unittest....108
Простой пример с использованием модуля pytest....109
Файл conftest.py....110
Плагины pytest....110
Разработка на основе тестирования....110
Управляемые тесты....111
Глава 5. Данные в рабочей среде....113
Контроль за данными....113
Схема – наше все....113
Балансировка нагрузки....114
Пагинация....114
Отслеживание источников....115
Бережно относитесь к ключам API....116
FlowShotgrid....117
API....117
Сущности....118
Схема....118
Оптимизация....120
FTrack....123
API....123
Сущности....124
Схема....124
Оптимизация....126
Kitsu....127
Локальная установка....127
API....128
Предварительное кеширование....129
Codecks....130
Python API....131
Jira....135
Обертки API....139
Когда не стоит применять обертки API....140
Написание обертки API....141
Структуры....142
Бэкенд....143
Адаптеры....143
Клиент....146
Глава 6. Отладка....148
Интерактивный отладчик PDB....148
Расширение отладчика PDB....150
Исключения....154
Инспекция....156
Отслеживание объектов....156
Инспекция с помощью QEventLoop....159
QObject....160
Аварийное завершение....162
Логирование....165
Процесс логирования....165
Как должен выглядеть лог?....166
Глава 7. Оптимизация....170
Профилирование....171
cProfile....171
LineProfiler....173
Дизассемблер....174
Оптимизация....175
Кеширование....176
Упражнения....177
Многопоточность....178
Простой пример с потоками....178
Простой асинхронный пример с потоками....180
asyncio....181
Порядок выполнения операций....184
Многопроцессорная обработка....190
Глава 8. Qt....195
Общий обзор....195
Не Qt единым....195
Советы по применению....196
Метаданные....197
Структура метаданных....198
Исследование данных....199
Как это использовать?....202
Стили и рисование....203
Стили Qt....203
Согласующиеся со стилем виджеты....205
Цветовые различия....205
QStylePainter....207
Таблицы стилей....209
HTML....214
Конечные автоматы....216
Что такое конечные автоматы?....216
Структура конечных автоматов....216
Анимация....218
Конечный автомат с именованными состояниями....221
SCXML....224
Отзывчивый интерфейс пользователя....228
Асинхронность....230
Способы реализации асинхронного выполнения кода....230
Какой код можно сделать асинхронным....231
Qt против встроенной асинхронности....232
Многопоточный интерфейс пользователя....232
Сетевые запросы....234
Информативность....236
Индикаторы прогресса....237
Многопроцессность....239
Индикация состояния....240
Адаптивность....243
Интерфейс, управляемый данными....246
Делегаты....247
Редактируемые делегаты....247
Графические делегаты....248
Использование делегатов....249
Подробнее о делегатах....252
Мапперы данных....255
Тестирование....257
pytest-qt....257
Перед началом тестирования....257
Цикл событий....258
Ожидание....258
Таймеры....259
Виджет для тестирования....260
Написание тестов....262
Фикстуры....262
Исходное состояние....263
Ваш первый тест в Qt....263
Сквозные тесты....264
Управляемые тесты....267
QML в DCC....272
Стилизация....272
Встраивание....275
QML в QWidget....275
QWidget в QML....276
Глава 9. Взаимодействие с пользователем....280
Что такое взаимодействие с пользователем?....280
Пять компонентов взаимодействия с пользователем....282
Стратегия....283
Наполнение....284
Структура....285
Скелет приложения....286
Интерфейс пользователя....287
Исследование....288
Каркасное моделирование....289
Пример....290
Прототипирование....292
Бумажные прототипы....292
Макеты....293
Порядок и важность....294
Порядок расположения виджетов....296
Пространство и расположение....302
Представления данных....307
Советы по сокращению отображаемых данных....310
Анимации....314
Когда стоит использовать анимацию?....314
Обеспечение общедоступности....315
Цвет....316
Макеты....316
Иконки....319
Ключ к успеху – единообразие....320
Где взять иконки?....321
Не заставляйте пользователя думать....324
Модель мышления....324
Упрощение интерфейса пользователя....324
Постепенное раскрытие....325
Главное – предсказуемость....325
Угадываем и проверяем....327
Не заставляйте пользователя ждать....329
Асинхронный интерфейс пользователя....330
Перенос запросов в отдельный поток....330
Циклы событий для отзывчивости интерфейса пользователя....330
Запуск в отдельном процессе....331
Информирование пользователя....332
Индикаторы прогресса....332
Вращающийся индикатор....332
Курсор ожидания....333
Мониторинг внешних процессов....333
Сделаем вид, что все работает, потом проверим....334
Оптимистичные обновления интерфейса пользователя....334
Ленивая загрузка и пагинация....335
Резервные сценарии в коде....335
Что такое резервные сценарии?....336
Упражнения....336
Что с этим можно сделать?....337
Наиболее важный резервный сценарий....338
Как протестировать резервные сценарии?....338
Дополнительная литература....339
Глава 10. Искусственный интеллект....340
Искусственный интеллект на службе студий....341
Порталы искусственного интеллекта....342
OpenRouter....342
Ollama....343
Терминология....343
Искусственный интеллект (ИИ)....343
Большая языковая модель (LLM)....343
Машинное обучение (ML)....344
Векторное хранилище эмбеддинги....344
Анализ главных компонент (PCA)....345
Агенты....345
Инструменты....345
Поисково-дополненная генерация (RAG)....345
Протокол контекста модели (MCP)....346
Длина контекста....346
Температура....346
Безопасность данных....347
Выбор большой языковой модели....347
Ограничения памяти....348
Квантование....349
Дообучение....349
С чего начать?....350
Промпт-инжиниринг....350
Шаблоны промптов....351
Чем проще, тем лучше....352
Структура промпта....352
Адаптирование промптов под большую языковую модель....356
Вредоносное внедрение промптов....357
Локальный запуск....359
Локальные модели....359
Установка Ollama....359
vLLM....361
Локальные ИИ-приложения....362
Anything LLM....362
LM Studio....363
OpenWebUI....363
Премиумные модели, развернутые на собственной инфраструктуре....364
Разработка с ИИ в качестве помощника....365
Вы – разработчик....367
ИИ-редакторы кода....367
Copilot....369
Continue.dev....374
Cline....378
Извлечение максимума пользы из ИИ....386
Структура....386
Автономные ИИ-разработчики....402
Вайб-кодинг?....404
Пример создания генератора диаграмм при помощи вайб-кодинга....405
Разработка ИИ-инструментов....409
Типы ИИ-инструментов....411
API....412
Простой пример....412
Простой агент....416
MCP-серверы....426
Глава 11. Важная информация....428
Юридические лицензии....428
Открытый исходный код ! бесплатный....428
Лицензия GPL....429
Кому какое дело?....430
Дополнительная информация....431
Ссылки....431
В книге описываются особенности работы в Python в условиях жестких временных рамок. В ней последовательно раскрываются важные нюансы, характерные для всех стадий разработки, а также подробно описываются лучшие практики программирования на Python, включая создание декораторов, интерфейсов и классов данных, а также самые популярные инструменты отладки кода, его оптимизации и тестирования.
Автор книги работает в сфере геймдева и vfx, поэтому в книге часто используются специфические примеры из этой области. Но это не мешает усвоению материала, т.к. полученные знания можно легко перенести в любую другую область.
Книга нацелена на разработчиков с опытом работы на Python, желающих оптимизировать свои рабочие процессы. Желательно знакомство с библиотеками Qt/PySide.