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

Вышла книга: Невероятная история Кындыкан. Эвенская сказка

Невероятная история Кындыкан. Эвенская сказка

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

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

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

Благодаря потомку Кындыкан Илаан-Маргарите Поповой и писательнице из Якутска Лидии Туллук эта история стала литературной сказкой. По ней вышел мультфильм и поставлено три детских спектакля.

Эта книга о чуде, силе рода, торжестве жизни. Посвящается таким малочисленным, но стойким людям — всем коренным народам Севера!

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

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

Вышла книга: Искусственный интеллект с LangChain. Разработка ИИ-агентов на Python

Искусственный интеллект с LangChain. Разработка ИИ-агентов на Python

Книга представляет собой практическое руководство по интеграции искусственного интеллекта в процесс разработки на Python. Рассматривается применение ИИ-ассистентов, включая ChatGPT и аналогичные языковые модели, для повышения эффективности на всех этапах жизненного цикла ПО: от сбора требований и проектирования до написания кода, тестирования, развертывания и мониторинга. На примере сквозного проекта (USB T-Shirt Launcher) и реальных сценариев шаг за шагом показано, как использовать ИИ для автоматизации рутинных задач, генерации чистого и безопасного кода, рефакторинга по принципам SOLID, написания тестов, настройки CI/CD и развертывания в облаке. Изложенная методология универсальна и позволяет применять описанные принципы с любым доступным ИИ-инструментом, превращая его в эффективного помощника для ускорения разработки и повышения качества кода.

ИИ-агент — это программа, которая не просто рассуждает, а сама выполняет действия: ищет информацию в Интернете или локальных файлах, сохраняет данные и многое другое.

Разработка таких агентов — самое перспективное направление в программировании сегодня. А главный инструмент для их создания — библиотека LangChain.

Хотите научиться писать ИИ-агентов на Python с помощью LangChain и построить карьеру в IT? Эта книга для вас.

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

Вы узнаете о продвинутых темах: посредники, управление состоянием и контекстом, прерывания, RAG-агенты, мультиагентные системы, протокол MCP, мультимодальные сообщения. А также реализуете агентов в виде Telegram-ботов, веб-приложений и графических интерфейсов.

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

 

 

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

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

Книгу “Искусственный интеллект с LangChain. Разработка ИИ-агентов на Python” можно купить в нашем интенет-магазине.

Предисловие 13
ИИ-клиенты и ИИ-агенты. Преимущества ИИ-агентов 13
Почему LangChain? 14
Использованные программные продукты 15
Типографские соглашения 16
ЧАСТЬ I. ВВОДНЫЙ КУРС 19
Глава 1. ИИ-клиент и простой ИИ-агент 21
1.1. Выбор большой языковой модели. GigaChat 21
1.2. Регистрация в личном кабинете GigaChat API и получение ключа авторизации 21
1.3. ИИ-клиент 22
1.3.1. Установка необходимых библиотек 23
1.3.2. Написание ИИ-клиента 23
1.4. Простой ИИ-агент 25
1.4.1. Простой ИИ-агент: создание агента LangChain 25
1.4.2. Простой ИИ-агент: работа с сообщениями 26
1.4.3. Простой ИИ-агент: инструмент 27
1.4.4. Простой ИИ-агент: вводная (системный промпт) 29
1.4.5. Простой ИИ-агент: история сообщений, состояние агента и хранилище состояния 31
1.5. Что еще нужно знать о больших языковых моделях, библиотеке LangChain
и не только? 32
Глава 2. Более сложный ИИ-агент 34
2.1. Более сложный ИИ-агент: начало разработки 34
2.2. Более сложный ИИ-агент: база данных пицц 36
2.3. Более сложный ИИ-агент: инструменты 37
2.3.1. Инструменты, часть 1 37
2.3.2. Инструменты, часть 2 38
2.3.3. Инструменты, часть 3 39
2.4. Более сложный ИИ-агент: вводная 42
2.5. Более сложный ИИ-агент: очистка истории. Посредники 44
2.6. Что еще нужно знать о посредниках, очистке истории и не только? 46
ЧАСТЬ II. БИБЛИОТЕКА LANGCHAIN: ОСНОВНЫЕ ВОЗМОЖНОСТИ 49
Глава 3. Установка библиотеки LangChain. Агенты LangChain 51
3.1. Понятие и назначение агента LangChain 51
3.2. Создание агента LangChain 51
3.3. Задание вводной у агента 53
3.4. Работа агента LangChain 54
3.5. Понятия состояния, общего хранилища и контекста агента LangChain 54
Глава 4. Соединение с языковой моделью 56
4.1. Создание соединения с языковой моделью 56
4.1.1. Использование функции init_chat_model() 56
4.1.1.1. Остальные параметры соединения 58
4.1.2. Использование классов соединений 59
4.2. Поддерживаемые языковые модели и соединение с ними 60
4.2.1. Облачные языковые модели 60
4.2.1.1. «Сбер» GigaChat 60
4.2.1.2. Google Gemini 62
4.2.1.3. YandexGPT 63
4.2.1.4. DeepSeek 65
4.2.2. HuggingFace 66
4.2.3. Ollama 68
Глава 5. Сообщения 70
5.1. Классы сообщений 70
5.1.1. BaseMessage 70
5.1.2. AIMessage 71
5.1.3. ToolMessage 72
5.1.4. Примеры сообщений разных разновидностей 72
5.2. Отправка вопросов и получение ответов: обычный режим 73
5.2.1. Отправка вопроса и получение ответа целиком: обычный режим 74
5.2.1.1. Отправка вопроса с указанием выдать ответ целиком: обычный режим 74
5.2.1.2. Получение ответа целиком: обычный режим 75
5.2.2. Отправка вопроса и получение ответа чанками: обычный режим 76
5.3. Отправка вопросов и получение ответов: конкурентный режим 78
5.4. Отладочный вывод сообщений 79
5.5. Что еще нужно знать о сообщениях? 82
Глава 6. Структурированный вывод 83
6.1. Объявление структуры вывода 83
6.1.1. Типизированные словари 83
6.1.2. Датаклассы 86
6.1.3. Модели Pydantic 86
6.2. Задание структуры вывода 88
6.3. Получение структурированного вывода 88
6.4. Обработка ошибок структурирования вывода 89
6.5. Программа для обработки почтовых адресов 91
6.5.1. Обработчик почтовых адресов: соединение с моделью, вводная и структура адреса 91
6.5.2. Обработчик почтовых адресов: агент и стартовый модуль 92
6.6. Мультиструктурный вывод 95
6.7. Структурированный вывод и языковые модели GigaChat 96
6.8. Что еще нужно знать о структурированном выводе? 97
Глава 7. Инструменты, часть 1 99
7.1. Объявление инструментов 99
7.1.1. Объявление инструментов-функций 99
7.1.2. Объявление инструментов-классов 102
7.2. Указание инструментов при создании агента 103
Глава 8. Инструменты, часть 2 105
8.1. Поиск в Интернете 105
8.1.1. DuckDuckGo 105
8.1.1.1. DuckDuckGo: базовый вывод 106
8.1.1.2. DuckDuckGo: расширенный вывод 106
8.1.1.3. DuckDuckGo: настройки поиска 107
8.1.2. Tavily Search 108
8.2. Поиск на отдельных веб-сайтах 110
8.2.1. Википедия 110
8.2.2. Wikidata 111
8.2.3. Google Books 112
8.3. Работа с базами данных 113
8.3.1. Создание пула соединений с базой данных 114
8.3.2. Создание объекта самой базы данных 115
8.3.3. Создание набора инструментов для работы с базой данных 116
8.3.4. Указание инструментов при создании агента 117
8.3.5. ИИ-программа телефонного справочника 118
8.3.5.1. ИИ-телефонный справочник: соединение с языковой моделью и вводная 118
8.3.5.2. ИИ-телефонный справочник: инструменты для работы
с базой данных 119
8.3.5.3. ИИ-телефонный справочник: агент и остальные модули 119
8.4. Работа с локальными файлами 121
8.4.1. Создание набора инструментов для работы с локальными файлами 121
8.4.2. ИИ-программа для создания заготовок программного кода 122
8.5. Что еще нужно знать об инструментах? 123
Глава 9. Работа с историей сообщений 124
9.1. Доступ к истории сообщений 124
9.1.1. Доступ к истории сообщений в инструментах 124
9.1.2. Доступ к истории сообщений в посредниках 125
9.2. Работа с историей сообщений 126
9.3. Внесение изменений в историю сообщений 127
9.4. Очистка истории сообщений 128
9.4.1. Непосредственное удаление сообщений 128
9.4.2. Обрезка истории 129
9.4.2.1. Обрезка истории: делаем сами 129
9.4.2.2. Обрезка истории: используем функцию trim_messages() 129
9.4.3. Удаление результатов вызова инструментов 131
9.4.4. Подведение итогов 132
ЧАСТЬ III. БИБЛИОТЕКА LANGCHAIN:
РАСШИРЕННЫЕ ВОЗМОЖНОСТИ 135
Глава 10. Посредники, часть 1 137
10.1. Посредники однократного вызова 137
10.1.1. Объявление посредников однократного вызова 137
10.1.2. Результаты, возвращаемые посредниками однократного вызова 139
10.1.2.1. None — не делать ничего 139
10.1.2.2. Сообщения — добавить их в историю 140
10.1.2.3. Команда перехода 140
10.2. Посредники двукратного вызова 141
10.2.1. Объявление посредников двукратного вызова 141
10.2.2. Работа посредников двукратного вызова 143
10.2.3. Классы запроса к языковой модели, вызова инструмента и результата, выданного языковой моделью 143
10.2.3.1. Класс ModelRequest: обращение к языковой модели 143
10.2.3.2. Класс ToolCallRequest: обращение к инструменту 145
10.2.3.3. Класс ModelResponse: результат обращения к языковой модели 145
10.2.4. Результаты, возвращаемые посредниками двукратного вызова 146
10.2.4.1. Изначальный результат обращения к языковой модели
или вызова инструмента 146
10.2.4.2. Результат, сгенерированный посредником 147
10.3. Посредники, создающие вводные 149
10.4. Посредники-классы 150
10.5. Указание посредников при создании агента 152
10.6. Последовательность выполнения посредников 152
Глава 11. Посредники, часть 2 154
11.1. LLMToolSelectorMiddleware: выбор используемых инструментов 154
11.2. ModelCallLimitMiddleware: ограничение количества обращений
к языковой модели 155
11.3. ToolCallLimitMiddleware: ограничение количества вызовов инструмента 156
11.4. ShellToolMiddleware: выполнение команд системной консоли 157
11.5. FilesystemFileSearchMiddleware: поиск файлов 160
11.6. TodoListMiddleware: список запланированных дел 161
11.7. LLMToolEmulator: имитация вызовов инструментов 163
Глава 12. Состояние, контекст агента и общее хранилище 164
12.1. Состояние агента 164
12.1.1. Задание структуры состояния агента 164
12.1.2. Чтение данных из состояния агента 165
12.1.3. Запись данных в состояние агента 166
12.2. Контекст агента 168
12.2.1. Задание структуры контекста агента 168
12.2.2. Указание контекста агента 168
12.2.3. Чтение данных из контекста агента 168
12.3. Общее хранилище 170
12.3.1. Указание общего хранилища 170
12.3.2. Структура общего хранилища 170
12.3.3. Работа с общим хранилищем 171
12.3.3.1. Запись документов 171
12.3.3.2. Чтение документов 171
12.3.3.3. Поиск документов 172
12.3.3.4. Перечисление пространств имен 173
12.3.3.5. Удаление документов 174
12.3.4. Доступ к общему хранилищу 174
Глава 13. Хранилища 177
13.1. Хранилища состояния 177
13.1.1. InMemorySaver: оперативная память 177
13.1.2. SqliteSaver: база данных SQLite 178
13.1.3. MongoDBSaver: база данных MongoDB 179
13.1.4. PostgresSaver: база данных PostgreSQL 180
13.1.5. PyMySQLSaver: база данных MySQL 181
13.2. Общие хранилища 182
13.2.1. InMemoryStore: оперативная память 182
13.2.2. SqliteStore: база данных SQLite 182
13.2.3. MongoDBStore: база данных MongoDB 182
13.2.4. PostgresStore: база данных PostgreSQL 183
13.2.5. PyMySQLStore: база данных MySQL 184
13.3. Что еще нужно знать о хранилищах? 184
Глава 14. Прерывания и преграды 185
14.1. Прерывания 185
14.1.1. HumanInTheLoopMiddleware: встроенный посредник,
выполняющий прерывания 185
14.1.1.1. HumanInTheLoopMiddleware: создание объекта посредника 185
14.1.1.2. HumanInTheLoopMiddleware: реагирование на прерывания 188
14.1.1.2.1. HumanInTheLoopMiddleware: реагирование на прерывания при выдаче ответа целиком 188
14.1.1.2.2. HumanInTheLoopMiddleware: реагирование на прерывания при выдаче ответа чанками 192
14.1.2. Самостоятельное выполнение прерываний и реагирование на них 192
14.1.2.1. Самостоятельное выполнение прерываний 192
14.1.2.2. Реагирование на самостоятельно выполненное прерывание 193
14.2. Преграды 194
14.2.1. Встроенные преграды 194
14.2.1.1. PIIMiddleware: выявление и блокирование конфиденциальных данных 194
14.2.1.2. ShellToolMiddleware: выполнение команд системной консоли — функциональность преграды 196
14.2.2. Написание своих преград 197
Глава 15. Обработка ошибок 199
15.1. Обработка ошибок в инструментах 199
15.1.1. Самостоятельная обработка ошибок 199
15.1.1.1. Обработка ошибок в конкретном инструменте 199

15.1.1.2. Обработка критических ошибок 200
15.1.1.3. Централизованная обработка ошибок в посреднике 200
15.1.2. ToolRetryMiddleware: повторный вызов инструмента в случае ошибки 201
15.2. Обработка ошибок в посредниках 203
15.3. Обработка ошибок в агентах 203
15.4. ModelFallbackMiddleware: переключение на запасную языковую модель 204
Глава 16. Разработка RAG-агентов, часть 1 205
16.1. Первый RAG-агент, использующий программно сформированные документы 205
16.1.1. Первый RAG-агент: документы, содержащие рецепты пицц 206
16.1.2. Первый RAG-агент: сплиттер, эмбеддинг и векторное хранилище 207
16.1.3. Первый RAG-агент: ретривер 208
16.1.4. Первый RAG-агент: вводная и всякие мелочи 210
16.2. Второй RAG-агент, загружающий документ из PDF-файла 211
16.3. Документы LangChain 212
16.3.1. Программное формирование документов 212
16.3.2. Загрузка документов из сторонних файлов. Загрузчики 213
16.3.2.1. Методы загрузчиков, предназначенные для создания документов 213
16.3.2.2. PyPDFLoader: один PDF-файл 214
16.3.2.3. PyPDFDirectoryLoader: все PDF-файлы в указанной папке 214
16.3.2.4. WebBaseLoader: отдельные веб-страницы 215
16.3.2.5. RecursiveUrlLoader: заданная веб-страница и все веб-страницы, на которые она ссылается 216
16.4. Сплиттеры 218
16.4.1. RecursiveCharacterTextSplitter: разбиение с сохранением структуры текста 218
16.4.2. CharacterTextSplitter: быстрое разбиение текста 219
16.4.3. Сплиттеры веб-страниц 220
16.4.3.1. HTMLHeaderTextSplitter: быстрое разбиение по заголовкам 220
16.4.3.2. HTMLSectionSplitter: разбиение по заголовкам на чанки ограниченного размера 221
16.4.3.3. HTMLSemanticPreservingSplitter: разбиение с сохранением структуры содержимого веб-страниц 222
16.5. Что еще нужно знать о разработке RAG-агентов, описанных в этой части темы? 223
Глава 17. Разработка RAG-агентов, часть 2 225
17.1. Эмбеддинги 225
17.1.1. «Сбер» GigaChat Embeddings 225
17.1.2. Google Gemini Embeddings 226
17.1.3. YandexGPT Embeddings 226
17.1.4. Эмбеддинги, доступные на HuggingFace 226
17.1.5. Эмбеддинги, работающие под управлением Ollama 227
17.2. Векторные хранилища 228
17.3.1. Создание векторного хранилища 228
17.3.1.1. InMemoryVectorStore: оперативная память 229
17.3.1.2. Chroma: оперативная память или локальный диск 230
17.3.1.3. PGVector: база данных PostgreSQL 231
17.3.2. Работа с векторным хранилищем 232
17.3. Ретриверы 234
17.4. Инструменты для поиска в векторном хранилище 234
17.5. Что еще нужно знать о разработке RAG-агентов, описанных в этой части темы? 235
Глава 18. Мультиагентные ИИ-программы 236
18.1. Принципы разработки мультиагентных ИИ-программ 236
18.2. Пример: ИИ-программа для работы с файлами и базой данных 237
Глава 19. Глубинные агенты LangChain 241
19.1. ИИ-программа исследователя рынка, основанная на глубинном агенте 242
19.2. Возможности глубинных агентов 244
19.3. Создание глубинных агентов 245
19.4. Описание подчиненных агентов 246
19.4.1. Описание подчиненных агентов в виде словарей 246
19.4.2. Описание подчиненных агентов в виде объектов 247
19.5. Файловые системы глубинных агентов 248
19.5.1. StateBackend: виртуальная, в хранилище состояния 249
19.5.2. StoreBackend: виртуальная, в общем хранилище 250
19.5.3. FilesystemBackend: физическая, в папке с заданным путем 250
19.5.4. CompositeBackend: гибридная 251
19.6. Хранение информации в файлах 252
19.6.1. Заметки для глубинного агента 252
19.6.2. Навыки глубинного агента 254
19.6.3. Сохранение произвольных данных 256
19.7. Прерывания в глубинных агентах 257
Глава 20. Протокол MCP. Доступ к удаленным инструментам 258
20.1. Базовые средства для разработки инструмент-серверов и инструмент-клиентов. MCP-серверы и MCP-клиенты 258
20.1.1. Написание инструмент-серверов 258
20.1.1.1. Создание MCP-сервера 259
20.1.1.2. Создание инструментов 260
20.1.1.3. Активизация MCP-сервера 261
20.1.1.4. Запуск инструмент-сервера 262
20.1.2. Написание инструмент-клиентов 263
20.1.2.1. Создание MCP-клиента 263
20.1.2.2. Получение списка инструментов, предоставляемых
инструмент-серверами 265
20.1.2.3. Особенности работы с агентом в случае использования
удаленных инструментов 265
20.2. Расширенные средства для разработки инструмент-серверов
и инструмент-клиентов 266
20.2.1. Ресурсы 266
20.2.1.1. Создание ресурсов в программе инструмент-сервера 266
20.2.1.2. Загрузка ресурсов в программе инструмент-клиента 267
20.2.2. Перехватчики вызовов 269
20.2.2.1. Объявление перехватчиков вызовов 269
20.2.2.2. Класс MCPToolCallRequest: обращение к удаленному
инструменту 270
20.2.2.3. Результаты, возвращаемые перехватчиками вызовов 272
20.2.2.4. Указание перехватчиков вызовов при создании MCP-клиента 273
20.2.2.5. Последовательность выполнения перехватчиков вызовов 273
20.2.3. Доступ к HTTP-заголовкам в теле инструментов 273
20.2.4. Контекст MCP-сервера и функции обратного вызова MCP-клиента 274
20.2.4.1. Пересылка текстовых сообщений 274
20.2.4.2. Индикация хода процесса 276
20.2.4.3. Запрос у пользователя подтверждения на выполнение операции 278
Глава 21. Мультимодальные сообщения 282
21.1. Работа с мультимодальными сообщениями средствами LangChain 282
21.1.1. Отправка в мультимодальных вопросах содержимого файлов 284
21.2. Мультимодальные сообщения и языковые модели GigaChat 285
21.2.1. Создание мультимодальных вопросов 285
21.2.2. Обработка мультимодальных ответов 287
ЧАСТЬ IV. ОФОРМЛЕНИЕ ИИ-АГЕНТОВ 291
Глава 22. Оформление ИИ-агентов в виде Telegram-ботов 293
22.1. Получение бот-жетона 293
22.2. Простой Telegram-бот: ИИ-приемщик заказов 295
22.2.1. Простой Telegram-приемщик заказов: обработка сообщений 295
22.2.2. Простой Telegram-приемщик заказов: собственно бот 296
22.2.3. Простой Telegram-приемщик заказов: остальной код 299
22.3. Создание Telegram-приложения 300
22.4. Запуск Telegram-приложения 301
22.5. Обработка обновлений разных видов 301
22.5.1. Обработка поступающих команд 301
22.5.1.1. Объявление обработчиков команд 302
22.5.1.2. Update: класс сведений о последнем обновлении 302
22.5.1.3. Message: класс сообщения 303
22.5.1.4. Класс контекста обработчика 304
22.5.1.5. User: класс пользователя Telegram 305
22.5.1.6. Оформление обработчиков команд 306
22.5.1.7. Указание обработчиков у Telegram-приложения 307
22.5.2. Обработка поступающих сообщений 307
22.6. Дополнительные средства для разработки Telegram-ботов 308
22.6.1. Использование экранной клавиатуры 308
22.6.1.1. Создание и вывод экранной клавиатуры 308
22.6.1.2. Реагирование на нажатия кнопок экранной клавиатуры 309
22.6.2. Отправка пользователю изображений 311
22.6.3. Отправка пользователю видео 314
22.7. Что еще нужно знать о разработке Telegram-ботов? 315
Глава 23. Оформление ИИ-агентов в виде веб-приложений 316
23.1. Веб-ИИ-агент, версия 0.1 316
23.1.1. Веб-ИИ-агент, версия 0.1: обработка сообщений 317
23.1.2. Веб-ИИ-агент, версия 0.1: веб-интерфейс 317
23.1.3. Веб-ИИ-агент, версия 0.1: запуск и тестирование 319
23.1.4. Веб-ИИ-агент, версия 0.1: фронтенд 323
23.2. Создание приложения FastAPI 327
23.3. Объявление контроллеров 328
23.3.1. Генерирование и выдача серверных ответов 328
23.3.2. Получение данных от пользователя 329
23.3.2.1. Данные в формате JSON 329
23.3.2.2. Данные в формате Form Data 330
23.3.2.3. GET-параметры 330
23.3.2.4. URL-параметры 331
23.3.2.5. Данные из cookie 331
23.3.3. Создание cookie 332
23.4. Создание маршрутов 332
23.5. Веб-ИИ-агент, версия 1.0 333
23.6. Поддержка протокола Websockets 335
23.6.1. Объявление Websockets-контроллеров 335
23.6.2. WebSocket: класс соединения Websockets 336
23.6.3. Обработка разрыва соединения клиентом 337
23.6.4. Создание Websockets-маршрутов 338
23.7. Веб-ИИ-агент: версия 2.0 338
23.7.1. Веб-ИИ-агент, версия 2.0: бэкенд 338
23.7.1.1. Веб-ИИ-агент, версия 2.0: обработка сообщений 338
23.7.1.2. Веб-ИИ-агент, версия 2.0: веб-приложение 339
23.7.2. Веб-ИИ-агент, версия 2.0: фронтенд 341
23.8. Веб-ИИ-агент, версия 2.1: очистка истории сообщений после разрыва соединения 343
23.9. Что еще нужно знать о разработке веб-ИИ-приложений? 344
Глава 24. Оформление ИИ-агентов в виде графических приложений 346
24.1. Графический ИИ-агент, версия 1.0 346
24.1.1. Графический ИИ-агент, версия 1.0: разработка 346
24.1.2. Графический ИИ-агент, версия 1.0: запуск 349
24.2. Оконные элементы 350
24.2.1. Базовые классы оконных элементов 350
24.2.2. Элементы управления 353
24.2.2.1. Надпись 353
24.2.2.2. Поле ввода 354
24.2.2.3. Флажок 355
24.2.2.4. Группа переключателей 355
24.2.2.5. Раскрывающийся список 356
24.2.2.6. Кнопка 359
24.2.3. Дополнительные оконные элементы 359
24.2.3.1. Графический элемент 359
24.2.3.2. Текст в формате Markdown 360
24.2.4. Контейнеры 361
24.2.4.1. Базовый класс контейнеров 361
24.2.4.2. Колонка 362
24.2.4.3. Строка 363
24.2.4.4. Прокручивающийся перечень 364
24.2.4.5. Сетка 364
24.3. Графический ИИ-агент, версия 1.1 365
24.4. Обработка событий 367
24.5. Вывод оконных элементов в окне 368
24.6. Дополнительные программные инструменты 368
24.6.1. Работа с клиентской областью окна 368
24.6.2. Управление окном 369
24.6.3. Вывод стандартных файловых диалоговых окон 371
24.7. Что еще нужно знать о разработке графических приложений? 373
Заключение 374
Приложение. Описание файлового архива 376
Предметный указатель 377

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

Вышла книга: Оптимизация производительности современных процессоров. 2-е изд.

Оптимизация производительности современных процессоров. 2-е изд.

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

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

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

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

Эксперт по производительности вычислительных машин Денис Бахвалов объясняет, как делать низкоуровневые оптимизации с использованием продвинутых методов и инструментов. Прочитав эту книгу, вы сможете находить причины снижения производительности своего приложения и находить разнообразные возможности его оптимизации. Книга изобилует практическими примерами и упражнениями.

Книга посвящена низкоуровневой оптимизации производительности: от анализа архитектуры CPU до работы с регистрами и машинным кодом

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

  • Как правильно измерять производительность кода
  • Архитектура современных процессоров
  • Обзор техник и инструментов для анализа производительности
  • Аппаратные средства для анализа производительности (счетчики и другие механизмы)
  • Способы оптимизации доступа к памяти и вычислений
  • Устранение промахов в кэше и неправильно предсказанных ветвлений
  • Оптимизация раскладки машинного кода
  • Векторизация и другие компиляторные оптимизации
Денис Бахвалов

Денис Бахвалов начал работу программистом в 2008 году и посвятил большую часть своей карьеры оптимизации взаимодействия между процессором и программным обеспечением. Работая в компании Intel, внедрил множество улучшений производительности в широко используемые промышленные приложения и бенчмарки. Является автором онлайн-курса «Performance Ninja» и ведет свой блог на сайте easyperf.net.

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

Предуведомление 9
От автора 11
Целевая аудитория 12
Об авторе 13
Глава 1. Введение 15
1.1. Почему программное обеспечение работает медленно? 16
1.2. Почему нужно уделять внимание производительности? 19
1.3. Что такое анализ производительности? 22
1.4. Что значит оптимизация производительности? 23
1.5. О чем рассказывается в этой книге? 24
1.6. О чем не рассказывается в этой книге? 26
1.7. Упражнения 27
Краткое содержание главы 28
ЧАСТЬ I. АНАЛИЗ ПРОИЗВОДИТЕЛЬНОСТИ
СОВРЕМЕННОГО ПРОЦЕССОРА 29
Глава 2. Анализ производительности 31
2.1. Воздействие помех на современные системы 32
2.2. Измерение производственной производительности 34
2.3. Непрерывное сравнительное тестирование 35
2.4. Ручное тестирование производительности 40
2.5. Программные и аппаратные таймеры 43
2.6. Микробенчмарки 45
2.7. Активное сравнительное тестирование 47
Вопросы и упражнения 48
Краткое содержание главы 48
Глава 3. Микроархитектура центрального процессора 51
3.1. Архитектура набора команд 51
3.2. Конвейерная обработка 52
3.3. Использование параллельного выполнения задач на уровне инструкций (ILP) 56
3.3.1. Внеочередное выполнение 56
3.3.1.1. Статическое планирование 57
3.3.1.2. Динамическое планирование 57
3.3.2. Суперскалярные процессоры 59
3.3.3. Спекулятивное исполнение 59
3.3.4. Прогнозирование ветвления 61
3.4. Мультипроцессоры SIMD 63
3.5. Использование параллельных вычислений на уровне потоков 66
3.5.1. Многоядерные системы 66
3.5.2. Одновременная многопоточная обработка 67
3.5.3. Гибридные конструкции 69
3.6. Иерархия памяти 71
3.6.1. Иерархия кеша 71
3.6.1.1. Размещение данных в кеше 72
3.6.1.2. Поиск данных в кеше 73
3.6.1.3. Управление промахами 73
3.6.1.4. Управление записями 73
3.6.1.5. Другие технологии оптимизации кеша 74
3.6.1.6. Программно-аппаратная предварительная выборка 74
3.6.2. Основная память 75
3.6.2.1. Двойная скорость передачи данных DDR 76
3.6.2.2. GDDR и HBM 79
3.7. Виртуальная память 80
3.7.1. Буфер ассоциативной трансляции (TLB) 82
3.7.2. Большие страницы 83
3.8. Конструкция современных центральных процессоров 84
3.8.1. Фронтенд центрального процессора 84
3.8.2. Бэкенд центрального процессора 87
3.8.3. Блок загрузки и записи 89
3.8.4. Иерархия буфера ассоциативной трансляции 93
3.9. Блок мониторинга производительности 94
3.9.1. Счетчики мониторинга производительности 96
Вопросы и упражнения 97
Краткое содержание главы 98
Глоссарий к рисункам главы 3 99
Глава 4. Терминология и метрики в анализе производительности 103
4.1. Завершенная и выполненная инструкция 104
4.2. Загрузка центрального процессора 104
4.3. CPI и IPC 105
4.4. Микрооперации 107
4.5. Слот конвейера 109
4.6. Такты ядра и относительные такты ядра 110
4.7. Промахи в кеше 111
4.8. Неправильное предсказание ветвления 112
4.9. Метрики производительности 113
4.10. Задержка памяти и пропускная способность 115
4.11. Практический пример. Анализ метрик производительности
для четырех приложений 120
Вопросы и упражнения 126
Краткое содержание главы 127
Глоссарий к рисункам главы 4 127
Глава 5. Методы анализа производительности 129
5.1. Инструментация кода 130
5.2. Трассировка 135
5.3. Сбор событий контроля производительности 136
5.3.1. Мультиплексирование и пересчет событий 138
5.3.2. Использование API-маркеров 140
5.4. Выборочное профилирование 144
5.4.1. Выборка в режиме пользователя и на основе аппаратных событий 145
5.4.2. Поиск горячих точек 146
5.4.3. Сбор стеков вызова 149
5.5. Модель производительности Roofline 151
5.6. Статический анализ производительности 155
5.6.1. Практический пример. Использование UICA для оптимизации
пропускной способности FMA 156
5.7. Отчеты об оптимизации компилятора 161
Вопросы и упражнения 164
Краткое содержание главы 165
Глава 6. Средства процессора для анализа производительности 167
6.1. Нисходящий анализ микроархитектуры 169
6.1.1. TMA на платформах Intel 170
Практический пример. Сокращение числа промахов кеша с помощью TMA 172
6.1.2. TMA на платформах AMD 177
6.1.3. ТМА на платформах Arm 179
6.1.4. Итоги раздела ТМА 183
6.2. Механизмы записи ветвлений 184
6.2.1. LBR на платформе Intel 186
6.2.2. LBR на платформах AMD 189
6.2.3. BRBE на платформах Arm 189
6.2.4. Сбор стека вызовов 189
6.2.5. Выявление горячих ветвей 190
6.2.6. Анализ коэффициента ошибочного предсказания ветвей 191
6.2.7. Точный тайминг машинного кода 192
6.2.8. Оценка вероятности результата ветвления 195
6.2.9. Предоставление обратной связи компилятору 196
6.3. Средства аппаратной выборки 196
6.3.1. PEBS на платформах Intel 196
6.3.2. IBS на платформах AMD 198
6.3.3. SPE на платформе Arm 200
6.3.4. Точные события 201
6.3.5. Анализ обращений к памяти 202
Вопросы и упражнения 203
Краткое содержание главы 203
Глоссарий к рисункам главы 6 204
Глава 7. Обзор инструментов анализа производительности 205
7.1. Профилировщик Intel VTune 205
7.2. AMD uProf 210
7.3. Инструменты Xcode от Apple 213

7.4. Perf для Linux 216
7.5. Диаграмма «пламени» 218
7.6. Трассировка событий в Windows 219
7.7. Специализированные и гибридные профилировщики 221
7.8. Профилирование памяти 228
7.8.1. Использование памяти 228
7.8.2. Практический пример. Анализ выделений памяти в Stockfish 230
7.8.3. Интенсивность использования и объем памяти 233
7.9. Непрерывное профилирование 236
Вопросы и упражнения 240
Краткое содержание главы 240
ЧАСТЬ II. ТЮНИНГ ИСХОДНОГО КОДА 243
Глава 8. Оптимизация доступа к памяти 249
8.1. Структуры данных, дружелюбные для кеша 250
8.1.1. Последовательный доступ к данным 250
8.1.2. Использование подходящих контейнеров 252
8.1.3. Упаковка данных 252
8.1.4. Упорядочивание полей 253
8.1.5. Другие методы реорганизации структуры данных 254
8.2. Динамическое распределение памяти 256
8.3. Устранение ограничений пропускной способности памяти 257
8.4. Уменьшение количества пропусков DTLB 259
8.4.1. Явные большие страницы 260
8.4.2. Прозрачные большие страницы 261
8.4.3. Явные и прозрачные большие страницы 263
8.5. Явная предварительная выборка памяти 264
Вопросы и упражнения 268
Краткое содержание главы 269
Глава 9. Оптимизация вычислений 271
9.1. Зависимость данных 272
9.2. Встраивание функций 278
9.2.1. Оптимизация хвостовых вызовов 280
9.3. Оптимизация циклов 281
9.3.1. Низкоуровневые оптимизации 282
9.3.2. Оптимизация высокого уровня 284
9.3.3. Поиск возможностей оптимизации циклов 287
9.4. Векторизация 288
9.4.1. Автовекторизация компилятора 289
9.4.2. Поиск возможностей векторизации 290
9.4.2.1. Векторизация недопустима 291
9.4.2.2. Векторизация неэффективна 293
9.4.2.3. Векторизованный цикл с использованием скалярной версии 294
9.4.2.4. Неоптимальная векторизация цикла 295
9.4.2.5. Языки с явной векторизацией 296
9.5. Встроенные функции компилятора 297
9.5.1. Библиотеки-обертки для внутренних функций 299
Вопросы и упражнения 301
Краткое содержание главы 302
Глава 10. Оптимизация предсказания ветвлений 303
10.1. Замена ветвлений таблицами поиска 305
10.2. Замена ветвлений арифметическими действиями 306
10.3. Замена ветвлений на условный выбор 306
10.4. Одно ветвление — несколько тестов 309
Вопросы и упражнения 311
Краткое содержание главы 312
Глава 11. Оптимизация компоновки машинного кода 313
11.1. Компоновка машинного кода 314
11.2. Базовый блок 314
11.3. Размещение базовых блоков 315
11.4. Выравнивание базовых блоков 317
11.5. Разделение функций 320
11.6. Упорядочивание функций 321
11.7. Оптимизации, управляемые профилем 323
11.8. Уменьшение промахов ITLB 326
11.9. Практический пример. Измерение размера горячего кода 328
Вопросы и упражнения 332
Краткое содержание главы 332
Глава 12. Дополнительные возможности для оптимизации 333
12.1. Оптимизация под конкретный процессор 333
12.1.1. Расширения ISA 335
12.1.2. Диспетчеризация процессоров 336
12.1.3. Задержки и пропускная способность инструкций 337
12.2. Специфические проблемы микроархитектур 340
12.2.1. Нарушения порядка операций с памятью 340
12.2.2. Невыровненный доступ к памяти 342
12.2.3. Конкуренция двух разных адресов за одну строку кеша 345
12.2.4. Замедленная арифметика со значениями с плавающей запятой 347
12.3. Методы оптимизции низкой задержки 349
12.3.1. Избегайте незначительных ошибок страниц 350
12.3.2. Разогрев кеша 352
12.3.3. Избегайте прерываний TLB 353
12.3.4. Предотвращение непреднамеренного троттлинга ядра 355
12.4. Настройка системы 355
12.5. Практический пример. Чувствительность к размеру кеша последнего уровня 357
Вопросы и упражнения 362
Краткое содержание главы 362
Глоссарий к рисункам главы 12 363
Глава 13. Оптимизация многопоточных приложений 365
13.1. Показатели эффективности работы в параллельном режиме 366
13.2. Масштабирование производительности в многопоточных программах 368
13.2.1. Пример анализа масштабирования при изменении числа потоков 370
Blender 372
Clang 373
Zstandard 375
CloverLeaf 378
CPython 380
Резюме 382
13.3. Планирование задач 383
13.4. Согласованность кеша 386
13.4.1. Протоколы согласования кеша 386
13.4.2. Истинное совместное использование 388
13.4.3. Ложное совместное использование 389
13.5. Инструменты расширенного анализа 391
13.5.1. Coz 391
13.5.2 eBPF и GAPP 392
Вопросы и упражнения 393
Краткое содержание главы 394
Эпилог 395
Благодарности 399
Глоссарий 403
Список основных микроархитектур процессоров 405
Ссылки 407
Приложение A. Уменьшение шумов при измерениях 411
Динамическое масштабирование частоты 411
Одновременная многопоточность 412
Изменение частоты 413
Привязка к ядру процессора 413
Приоритет процесса 414
Приложение B. Включение больших страниц 415
Windows 415
Linux 416
Явные большие страницы 416
Прозрачные большие страницы 417
Приложение C. Трассировка процессоров Intel 419
Процесс работы 419
Временные пакеты 421
Сбор и декодирование трасс 421
Дисковое пространство и время декодирования 423
Инструменты 424
Intel PT: ссылки и упоминания 424
Приложение D. Анализ трассировки для Windows 425
Инструменты для записи трасс ETW 425
Инструменты для просмотра и анализа трасс ETW 426
Практический пример — медленный старт программы 426
Установка 426
Захват трассы 427
Анализ в WPA 428

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

Вышла книга: “Программная архитектура: практика командного принятия решений”

Программная архитектура: практика командного принятия решений

В современных реалиях разработки ПО классическая модель архитектора как единоличного автора решений утрачивает эффективность. Книга предлагает практический подход к архитектуре как к непрерывному процессу принятия решений с участием всей команды. Вводится понятие архитектурно значимых решений, и даются инструменты для работы с ними. Основной метод — «процесс архитектурных советов», сочетающий скорость разработки с архитектурной целостностью через быструю обратную связь. Читатель освоит документирование решений (Architecture Decision Records), организацию архитектурных форумов, формулирование тестируемых нефункциональных требований и построение технологических радаров.

Для архитекторов программного обеспечения

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

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

С помощью этой книги вы:

  • Поймёте новую динамику, влияющую на разработку современного ПО
  • Изучите подход, объединяющий архитектуру ПО и разработку
  • Поймёте фундаментальную взаимосвязь между решениями, советами, архитектурой и обратной связью от используемых систем
  • Научитесь внедрять практики, способные максимизировать выгоду и снизить риски
  • Сформируете подход, в котором будут учитываться ваша архитектура, навыки каждого сотрудника и культура вашей организации

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

 

Лучшие архитектуры ПО создаются усилиями всего коллектива. В книге Эндрю представлена практическая реализация этого видения: вовлечение широкого круга людей и ведение точного учета принятых решений.Мартин Фаулер, главный научный сотрудник компании Thoughtworks

 

Andrew-Harmel-Law

Эндрю Хармел-Лоу — технический директор компании Thoughtworks, специализирующейся на предметно-ориентированном проектировании, крупномасштабной модернизации и организационных преобразованиях. Активный сторонник открытого исходного кода. Делится своим опытом через онлайн-тренинги, статьи, публичные выступления и наставничество.

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

Отзывы.. 15

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

Введение. 23

Кому предназначена эта книга. 25

Зачем я написал эту книгу. 27

Содержание книги. 29

Условные обозначения. 29

Дополнительные материалы.. 30

Онлайн-обучение в O’Reilly. 30

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

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

ГЛАВА 1. Централизованные практики архитектуры
в децентрализованном мире. 33

Создание успешной архитектуры ПО в равной степени зависит от практик
и конечного результата. 33

Как выглядят традиционные практики архитектуры?. 35

Архитекторы в “башне из слоновой кости”. 36

Практико-ориентированные архитекторы.. 37

Что не так с этими традиционными подходами?. 38

Пять переломных моментов, раскрывающих мощь ПО.. 39

Влияние пяти революций на практики разработки архитектуры.. 43

Рассвет децентрализации. 44

Закат практик разработки централизованной архитектуры.. 49

Что должна предлагать новая практика архитектуры?. 54

Ни один подход не защитит нас от фактора хаотичности. 55

Архитектуры должны учитывать неопределенность. 55

Архитектура должна допускать эмерджентность. 57

Вывод. 60

Часть I. Первые принципы.. 61

ГЛАВА 2. Практика создания архитектуры означает принятие решений. 63

Решения — главный компонент архитектуры ПО.. 64

Что представляет собой архитектурное решение?. 65

Структура. 65

Кросс-функциональные характеристики. 66

Зависимости. 67

Интерфейсы.. 67

Техники построения. 67

Некоторые примеры архитектурных и неархитектурных решений. 69

Кто принимает архитектурные решения?. 71

Значимые архитектурные решения. 71

Что делает архитектурное решение “значимым”?. 71

Что не следует учитывать в контексте архитектурной значимости?. 74

Архитектурная значимость в контексте развернутого ПО.. 75

Некоторые примеры значимых архитектурных решений. 77

Вывод. 79

ГЛАВА 3. Масштабные решения. 80

Процессы принятия решений. 80

Этап 1: потребность в принятии решения. 81

Этап 2: акт принятия решения. 81

Этап 3: внедрение решения. 83

Где лежит баланс сил в процессах принятия решений?. 83

При традиционных архитектурных подходах команды недостаточно
вовлечены в выбор вариантов решений. 85

Масштабные процессы принятия решений. 86

Стандартные подходы к принятию масштабных решений. 86

Процессы принятия решений в революционном мире разработки ПО.. 94

Вывод. 98

ГЛАВА 4. Процесс архитектурных консультаций. 99

Потребность в быстрых и децентрализованных процессах принятия решений. 99

Процесс архитектурных консультаций: одно правило, две группы консультантов и один контракт  100

Процесс архитектурных консультаций является быстрым.. 102

Процесс архитектурных консультаций является децентрализованным.. 103

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

Два примера процесса архитектурных консультаций в действии. 106

История 1: команда разработки решает использовать релизные переключатели  107

История 2: архитектор решает устранить проблему с рабочим процессом.. 114

Центральная роль консультаций. 122

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

Советы помогают тем, кто выбирает варианты и принимает решения. 125

Подотчетность приходит с принятием решений, а не предоставлением совета  126

Важность диалога. 128

Важность доверия. 129

Вывод. 130

ГЛАВА 5. Внедрение процесса архитектурных консультаций. 131

Первые шаги. 131

Если у нас уже есть полномочия принятия решений. 131

Если у нас нет полномочий принятия решений. 132

Следует начинать с малого, независимо от отправной точки. 134

Преодоление сложностей на ранних этапах. 136

Объяснение процесса архитектурных консультаций всем участникам.. 136

Обращение за советом к нужным людям.. 136

Вопросы следует адресовать нужным людям и искать ответ на вопрос “Почему?”  138

Следует явно объяснить, кто несет ответственность за каждое решение. 140

Недостаток уверенности относительно процесса архитектурных
консультаций. 142

Нехватка уверенности в ваших и чужих навыках принятия решений. 142

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

Нехватка уверенности в том, что мы знаем всё, что происходит. 143

Вывод. 144

ГЛАВА 6. Архитектурные записи решений. 145

Введение в архитектурные записи решений. 145

Структура архитектурных записей решений. 147

Название. 148

Метаданные. 149

Решение. 150

Контекст. 151

Варианты.. 152

Результаты.. 153

Совет. 154

Создание шаблона архитектурной записи решения. 156

Этап 1: создадим пустую архитектурную запись решения и набор связанных метаданных  156

Этап 2: внесем сведения о контексте. 157

Этап 3: сформируем список вариантов и спрогнозируем возможные результаты   161

Этап 4: предложим выбранный вариант. 165

Использование архитектурных записей решений для упрощения процесса консультаций  167

Когда и как обращаться за советами. 167

Создание раздела “Совет”. 169

Сбор советов. 170

Внесение изменений в архитектурную запись решения для отражения вклада других лиц  172

Принятие решения и итоговый вариант архитектурной записи. 177

Выбор варианта решения. 177

Составление раздела “Решение” и обновление названия. 179

Изменение статуса архитектурной записи решения на “Принято”. 180

Оглашение решения. 181

Жизненный цикл архитектурной записи решения. 181

Стандартные статусы: “Черновик”, “Предложено”, “Принято”
и “Заменено”. 181

Нестандартные статусы архитектурных записей решений. 182

Управление архитектурными записями решений. 184

Основополагающие аспекты управления архитектурными записями решений. 184

Архитектурные записи решений на вики и RTF-файлы в системе контроля версий  185

Архитектурные записи решений в тикет-системах. 186

Контроль над архитектурными записями решений. 187

Вывод. 188

Часть II . Взращивание и развитие культуры децентрализованного доверия  189

ГЛАВА 7. Децентрализация доверия вместо иерархии. 191

Перенос ответственности и подотчетности. 192

Большинство традиционных методов управления устаревают. 192

Процесс консультирования совместим с существующими структурами корпоративной архитектуры   193

Отчетность через архитектурные записи решений — сдерживающий
фактор против безрассудства. 194

Команды не обязаны принимать решения. 194

Раскрытие потенциала пространства для архитектурных практик. 195

Создание условий для формирования культуры обучения и доверия. 196

Два примера доверия (или его отсутствия) в действии. 197

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

Необходимо тщательно взращивать культуру доверия и обучения. 198

Понимание динамики изменений в организациях разного размера. 198

Использование вспомогательных элементов для защиты пространства
для доверия. 202

Защита пространства для практик архитектуры.. 202

Отсутствие стандарта для вспомогательных элементов. 203

Адаптация вспомогательных элементов под себя. 203

Netflix: пример мышления, основанного на поиске потока. 205

Опасность сирен, призывающих к определенности и предсказуемости. 206

Поиск оптимального потока для нашей организации лежит через эксперименты   207

Вывод. 207

ГЛАВА 8. Консультативный форум по архитектуре. 209

Знакомство с консультативным форумом по архитектуре. 209

Простая постоянная повестка дня. 210

Чем консультативный форум отличается от совещаний в традиционных подходах  211

Проведение консультативного форума по архитектуре. 212

Перед консультативным форумом.. 212

Обнародование программы.. 213

Открытие сессии консультативного форума по архитектуре. 213

Презентация архитектурной записи решений. 214

Предложение и получение совета. 214

Документирование совета. 215

Социальная динамика на консультационном форуме. 215

Взаимодействия по вопросам архитектуры изначально являются состязательными и иерархическими  216

Коалесцентная аргументация: альтернатива состязательной. 217

Процесс архитектурных консультаций и ADR как коалесцентный
подход. 219

Консультативные форумы создают мощную групповую динамику. 220

Опыт для предоставляющих советы.. 221

Опыт для тех, кто ищет совета. 222

Опыт для обучающихся наблюдателей. 223

Совместное участие в творческой деятельности. 224

Консультативный форум по архитектуре способствует формированию концептуальной целостности и социальной сплоченности. 225

Децентрализованное выполнение при централизованной координации. 226

Глубокая экспертиза в предметной области: когда централизация
работает лучше. 228

Повышение социальной сплоченности и доверия за счет прозрачности. 229

Ритм как ритуал усиления. 233

Запуск процесса консультаций с помощью консультативного форума. 235

Условия ведения (ToR) 235

Если вы используете консультативный форум для инициации процесса консультаций  236

Кто должен организовать первый консультативный форум?. 236

Чем первый консультативный форум будет отличаться от последующих. 237

Вывод. 238

ГЛАВА 9. Проверяемые кросс-функциональные требования и технологическая стратегия  240

Важность согласованности внутри организации. 240

Согласованность не гарантирует эффективность. 241

Выявление недостаточной организационной согласованности. 244

Четыре способа обеспечения согласованности. 246

Согласованность не оставляет места для сюрпризов. 247

Минимальное жизнеспособное соглашение. 251

Кросс-функциональные требования. 252

Технологическая стратегия. 262

Работа над формированием минимального жизнеспособного соглашения организации  269

Вывод. 269

ГЛАВА 10. Совместно разрабатываемые архитектурные принципы.. 270

Архитектурные принципы должны формировать все участники процесса. 270

Примеры архитектурных принципов. 271

Признаки хороших архитектурных принципов. 273

Признаки плохих архитектурных принципов. 274

Принципы могут оказаться замаскированными кросс-функциональными требованиями  275

Архитектурные принципы дополняют процесс консультаций
и архитектурные записи решений. 276

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

Подготовка материалов для вашего семинара по принципам.. 278

Организация семинара по принципам.. 282

Проведение семинара по принципам.. 286

Представление ваших готовых принципов. 295

Поддержание полезности принципов. 298

Обратная связь после принятия решений должна влиять на архитектурные принципы   298

Обновление и поддержка принципов. 300

Обратная связь после принятия решений может повлиять на техническую стратегию   302

Вывод. 303

ГЛАВА 11. Использование технологического радара. 304

Отслеживание технологических тенденций и учет рекомендаций. 304

Технологические радары как источник рекомендаций. 305

Как работает технологический радар Thoughtworks. 306

Ваш внутренний технологический радар будет иметь другую структуру. 310

Место вашего радара в процессе консультаций. 310

Создание собственного технологического радара. 313

Сбор информации об эхосигналах. 314

Сортировка и валидация эхосигналов. 317

Фокусировка эхосигнала. 319

Позиционирование эхосигналов. 322

Документирование эхосигналов. 323

Публикация радара. 323

Обновление ваших эхосигналов. 325

Периодическая развертка радара. 326

Специальные обновления, основанные на совместном опыте. 328

Фиксация предыдущих эхосигналов и их истории. 329

Вывод. 329

Часть III. Поиск собственного пути в процессе принятия решений. 331

ГЛАВА 12. Искусство принятия решений. 333

Важность более мягкой стороны.. 333

Фрейминг контекста. 333

Исключение так же важно, как и включение. 334

Вопросы, помогающие усовершенствовать фрейминг. 336

Вовлекайте правильные заинтересованные стороны.. 337

Продуманные варианты и их последствия. 338

Не позволяйте фрейму ограничить вашу креативность. 338

Поиск вдохновения. 340

Уточнение контекста и вариантов решения с помощью советов. 341

Развитие навыков метапознания. 343

Упражнение 1. Поделитесь своими идеями. 344

Упражнение 2. Вы реагируете или отвечаете?. 344

Упражнение 3. Намеренно обращайтесь за советом, который
противоречит вашим представлениям.. 345

Умение справляться с несговорчивыми личностями. 346

Выбор вариантов решения. 349

Преодоление страха. 350

Преодоление личных предубеждений. 352

Принятие решения. 353

Когда решение принимаете вы.. 353

Когда решение принимают другие. 354

Вывод. 357

ГЛАВА 13. Борьба с архитектурной изменчивостью.. 358

Влияние изменчивости на практику архитектуры.. 359

Изменчивость затрудняет разработку систем.. 359

Изменчивость как основа разработки ПО.. 362

Эффективная работа с архитектурной изменчивостью.. 363

Борьба с изменчивостью путем быстрого принятия и тестирования
решений. 365

Углубленная проверка решений с помощью функционального контекста. 365

Метод “ходячего скелета” для тестирования решений в их
функциональном контексте на самых ранних этапах. 366

Борьба с изменчивостью через небольшие решения. 368

Влияние архитектурных решений на будущий поток. 377

Хорошая техническая инфраструктура позволяет принимать небольшие решения  377

Хорошая социотехническая инфраструктура также позволяет принимать небольшие решения  378

Используйте процесс консультаций, чтобы разделить решения по потоку. 379

Использование изменчивости для борьбы с рисками и выявления ценности. 380

Лучше быстро и неправильно, чем медленно и правильно. 380

Следите за выбросами. 381

Сначала упорядочьте наиболее ценные решения. 382

Вывод. 383

ГЛАВА 14. Изменчивость и взаимосвязанность решений. 385

Противодействие изменчивости. 385

Введение в спайки. 386

Спайки помогают справиться с архитектурной изменчивостью путем меньших затрат  387

Где применяются спайки в процесс принятия решений?. 388

Использование спайков для составления архитектурных записей
решений. 388

Архитектурные записи решений на основе спайков по-прежнему должны проходить через процесс консультаций. 394

Изучение взаимосвязи между принимаемыми решениями. 395

Решение — это последовательность. 395

Решение — это обратная иерархия. 399

Атомарные решения. 409

Принятие решений оказывает двунаправленное воздействие. 412

Взаимосвязанные решения являются социально сложными. 415

Вывод. 417

Часть IV. “Социальный” аспект нашей архитектурной практики. 419

ГЛАВА 15. Передача власти и подотчетности. 421

Переход власти никогда не бывает простым.. 421

Переход власти с позиции тех, кто ее получает. 423

Все ли верят, что у них есть право решать?. 423

Все ли понимают свою подотчетность?. 426

Почему люди не пользуются доступной им властью?. 430

Важность безопасности. 431

Переход власти с позиции тех, кто должен ею поделиться. 445

Страх тех, кто отдал власть. 446

Поведение тех, кому не нравится факт разделения власти. 449

Передача власти вызывает дискомфорт. 452

Вывод. 453

ГЛАВА 16. О лидерстве. 454

Ошибочные представления о лидерстве. 454

Заблуждение 1: лидерство — это врожденное качество. 455

Заблуждение 2: лидерство неразрывно связано с иерархией. 456

Заблуждение 3: лидерство носит однонаправленный характер. 456

Заблуждение 4: лидерство — это управление. 457

Что такое лидерство. 458

14 ключевых принципов Деминга. 459

“Служащее лидерство” 460

Адаптивное лидерство. 461

Лидерство через подход “лидер – лидер”. 464

Трудности при внедрении лидерства через подход “лидер – лидер”. 466

Потребность в постоянном моральном лидерстве. 473

Реагирование на моральные вызовы.. 474

Проявляйте внимание, но не привязывайтесь ко всем культурам
в компании. 476

Отсутствие “постоянных лидеров”. 477

Вывод. 478

ГЛАВА 17. Адаптация процесса консультаций под нашу организацию.. 479

Субкультура в сфере разработки ПО.. 479

Причина 1. Разработка ПО не следует стандартным ментальным
моделям создания. 480

Причина 2. Темпы изменений в ИТ-подразделениях намного выше,
чем где-либо еще. 481

Причина 3. Точек соприкосновения между отделом разработки ПО и остальной частью организации не много, и они четко различимы.. 481

Причина 4. Культурное разделение между разработчиками ПО
и остальной частью организации уже признано. 482

“Пузыри” процесса консультаций. 483

“Пузыри” видны только тем, кто их ищет. 484

Самоорганизация “пузырей”. 485

“Пузыри” проницаемы.. 488

Внешние ожидания в отношении тех, кто находится внутри “пузыря”. 488

Очевидные ожидания. 489

Менее очевидные ожидания. 490

“Пузыри” — это интерфейс, не зависящий от реализации. 495

Контракт интерфейса “пузыря”. 495

Перевод идей для всех. 496

Рост числа “пузырей”. 498

Постепенный рост, от команды к команде. 498

Убедитесь, что вы защищаете основные цели своей архитектурной практики. 500

Разделение “пузырей” по мере их увеличения. 500

Ничто не может расширяться вечно. 501

“Пузырь” следует разделить, когда ключевые ценности практики архитектуры находятся под угрозой  501

Как разделить “пузырь”. 502

Поддержание согласованности между “пузырями”. 505

Защита и поощрение различий между “пузырями”. 505

Вывод. 506

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

Об авторе. 510

Об изображении на обложке. 511

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

Встречайте: “Прикладные API для искусственного интеллекта и Data Science”

Прикладные API для искусственного интеллекта и Data Science

Книга рассказывает о проектировании API для обработки данных и взаимодействия с большими языковыми моделями. Рассматривается работа с языком Python и его фреймворками FastAPI, Streamlit и LangChain. Рассматривается интеграция API в имеющиеся рабочие процессы, типичные для обработки данных, вывод приложения в облако, подбор интерфейсов для обслуживания различных задач, применение больших языковых моделей класса GPT для оптимизации и ускорения проектирования API.

 

Для специалистов по проектированию API, науке о данных и машинному обучению

Навыки создания API незаменимы при работе с искусственным интеллектом и в науке о данных (Data Science). Умение проектировать и поддерживать API для искусственного интеллекта понадобится как новичкам, так и опытным профессионалам. Эта практическая книга поможет вам на собственном опыте освоить разработку и поддержку API на Python с применением популярных фреймворков этого языка —  FastAPI, LangChain и Streamlit .

Книга делится на три части и рассказывает, как разрабатывать API с нуля, интегрировать их в рабочие процессы, типичные для обработки данных, научиться использовать такие инструменты как ChatGPT и LangChain, чтобы взаимодействовать с API при помощи больших языковых моделей (LLM). Проработав книгу, вы приобретете портфолио готовых проектов с качественными API, которые в самом выгодном свете продемонстрируют ваше мастерство в работе с ИИ, машинным обучением и наукой о данных.

  • Научитесь проектировать API для различных приложений из области data science
  • Откройте для себя, как собирать и развертывать API при помощи Python и FastAPI
  • Изучите, как интегрировать API в рабочие процессы, связанные с обработкой данных, применять API для доступа к данным и их визуализации
  • Тренируйте модели машинного обучения, а затем развертывайте их в виде API
  • Освойте эффективное взаимодействие с API при помощи искусственного интеллекта и больших языковых моделей

Эта книга — потрясающая новинка для всего сообщества исследователей данных. Порадуйте себя — добавьте эту книгу в свою профессиональную библиотеку, чтобы расти, совершенствоваться и становиться всё более эффективным специалистом по data science!

 

Алекс Гутман, автор книги «Becoming a Data Head: How to Think, Speak, and Understand Data Science, Statistics, and Machine Learning»

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

 

Джеймс Гоф, заслуженный инженер в компании Morgan Stanley, автор книги «Проектирование архитектуры API»

 

rayan day

Райан Дэй — высокопрофессиональный исследователь данных, работающий в компании CSBS и участвующий в разработке свободного ПО. Один из разработчиков фреймворка FastAPI, обладает опытом облачных вычислений и разработки API в государственном секторе.

Книгу “Прикладные API для искусственного интеллекта и Data Science” можно купить в нашем интенет-магазине.

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

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

Зачем вам читать эту книгу?…………………………………………………………………………………………………….. 17

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

Для специалистов по работе с данными………………………………………………………………………. 17

Для разработчиков и проектировщиков API………………………………………………………………… 18

Для ищущих работу и желающих сменить свою роль………………………………………………… 18

Создание портфолио-проектов…………………………………………………………………………………………………. 18

Как пользоваться данной книгой……………………………………………………………………………………………… 19

Чем не является данная книга…………………………………………………………………………………………………… 19

Почему именно фэнтези-футбол?……………………………………………………………………………………………… 20

Получение дополнительных советов по API, искусственному интеллекту и науке о работе с данными          20

Соглашения, принятые в данной книге……………………………………………………………………………………. 21

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

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

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

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

Часть I. Разработка API для задач Data Science…………………… 25

Глава 1. Создание API, которые понравятся специалистам по обработке данных            27

Для чего специалисты по обработке данных используют API-интерфейсы?………………………. 27

Какие инструменты используют специалисты по обработке данных?………………………………… 28

Проектирование API для специалистов по обработке данных……………………………………………… 29

Предоставление первой части вашего портфолио-проекта…………………………………………………… 30

У каждого API есть своя история……………………………………………………………………………………………… 31

Знакомьтесь с вашей компанией: SportsWorldCentral…………………………………………………. 31

SWC нуждается в API…………………………………………………………………………………………………….. 33

Выбор первых API-продуктов………………………………………………………………………………………………….. 34

Выявление потенциальных пользователей………………………………………………………………….. 34

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

Дополнительные источники информации……………………………………………………………………………….. 37

Резюме…………………………………………………………………………………………………………………………………………. 37

Глава 2. Выбор архитектуры, подходящей для API………………………………… 39

Архитектурные стили API…………………………………………………………………………………………………………. 39

Обмен репрезентациями ресурсов (Representational State Transfer, REST)……………….. 40

Язык графических запросов Graph Query Language (GraphQL)………………………………….. 40

gRPC…………………………………………………………………………………………………………………………………. 41

Ваш выбор: REST…………………………………………………………………………………………………………… 41

Технологическая архитектура…………………………………………………………………………………………………. 43

Программные средства, используемые в данной главе………………………………………………………….. 45

Python………………………………………………………………………………………………………………………………. 45

GitHub………………………………………………………………………………………………………………………………. 45

Начало работы с GitHub Codespace………………………………………………………………………………………… 46

Создание учетной записи в GitHub……………………………………………………………………………….. 46

Клонирование репозитория части первой……………………………………………………………………. 46

Запуск вашей среды GitHub Codespace………………………………………………………………………… 47

Знакомство с новым кодовым пространством……………………………………………………………… 47

Совершение вашего первого коммита………………………………………………………………………….. 49

Дополнительные источники информации……………………………………………………………………………….. 52

Резюме…………………………………………………………………………………………………………………………………………. 52

Глава 3. Создание базы данных…………………………………………………………….. 53

Компоненты API………………………………………………………………………………………………………………………… 53

Программные средства, используемые в данной главе………………………………………………………….. 54

SQLite……………………………………………………………………………………………………………………………….. 54

SQLAlchemy…………………………………………………………………………………………………………………….. 54

pytest………………………………………………………………………………………………………………………………… 55

Создание базы данных SQLite………………………………………………………………………………………………….. 55

Создание таблиц базы данных……………………………………………………………………………………… 56

Принципы формирования таблиц…………………………………………………………………………………. 58

Загрузка данных…………………………………………………………………………………………………………….. 59

Доступ к данным из Python……………………………………………………………………………………………………….. 61

Установка SQLAlchemy в вашу среду………………………………………………………………………….. 61

Создание Python-файлов для доступа к базе данных…………………………………………………. 62

Создание файла конфигурации базы данных……………………………………………………………… 67

Создание вспомогательных функций SQLAlchemy…………………………………………………….. 68

Установка pytest в вашу среду………………………………………………………………………………………. 72

Тестирование нашего кода SQLAchemy………………………………………………………………………. 73

Дополнительные источники информации……………………………………………………………………………….. 76

Резюме…………………………………………………………………………………………………………………………………………. 76

Глава 4. Разработка кода FastAPI………………………………………………………….. 79

Продолжение разработки портфолио-проекта……………………………………………………………………….. 79

Программные средства, используемые в данной главе………………………………………………………….. 80

FastAPI…………………………………………………………………………………………………………………………….. 80

HTTPX……………………………………………………………………………………………………………………………… 81

Pydantic……………………………………………………………………………………………………………………………. 81

Uvicorn……………………………………………………………………………………………………………………………… 82

Копирование файлов из каталога третьей главы……………………………………………………………………. 82

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

Создание файлов на языке Python для нашего API………………………………………………………………… 83

Создание Pydantic-схем…………………………………………………………………………………………………. 83

Создание контроллера FastAPI…………………………………………………………………………………….. 87

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

Запуск API………………………………………………………………………………………………………………………………….. 97

Дополнительные источники информации……………………………………………………………………………….. 99

Резюме………………………………………………………………………………………………………………………………………. 100

Глава 5. Документирование API…………………………………………………………… 101

Документация как сигнал доверия…………………………………………………………………………………………. 101

Создание высококачественной API-документации………………………………………………………………. 102

Основные функции……………………………………………………………………………………………………….. 102

Дополнительные функции……………………………………………………………………………………………. 103

Просмотр примеров документации по API……………………………………………………………………………. 104

Приложение Sleeper………………………………………………………………………………………………………. 104

MyFantasyLeague…………………………………………………………………………………………………………. 105

Yahoo! Фэнтези-футбол……………………………………………………………………………………………….. 105

Просмотр встроенной документации вашего API………………………………………………………………… 107

Копирование файлов из каталога четвертой главы………………………………………………….. 107

Вариант документации 1: Swagger UI………………………………………………………………………… 108

Вариант документации 2: Redoc………………………………………………………………………………… 113

Работа с файлом спецификации OpenAPI……………………………………………………………………………… 114

Продолжение разработки портфолио-проекта…………………………………………………………………….. 117

Добавление сведений к OAS-объекту info………………………………………………………………….. 118

Добавление тегов для классификации путей……………………………………………………………… 119

Добавление дополнительных сведений к конкретным конечным точкам………………. 120

Добавление описаний параметров……………………………………………………………………………… 121

Просмотр изменений в Swagger UI………………………………………………………………………………. 121

Регрессионное тестирование API………………………………………………………………………………… 123

Обновление файла README.md……………………………………………………………………………………………. 123

Дополнительные источники информации……………………………………………………………………………… 125

Резюме………………………………………………………………………………………………………………………………………. 126

Глава 6. Развертывание API в облаке…………………………………………………… 127

Преимущества и обязательства при развертывании API в облаке……………………………………… 127

Преимущества………………………………………………………………………………………………………………. 127

Обязательства……………………………………………………………………………………………………………….. 128

Выбор облачного хостинга для вашего проекта………………………………………………………………….. 129

Настройка каталога проекта………………………………………………………………………………………………….. 130

Использование GitHub Codespaces в качестве облачного хостинга…………………………………… 130

Развертывание в Render…………………………………………………………………………………………………………… 131

Регистрация на Render…………………………………………………………………………………………………. 132

Создание нового веб-сервиса………………………………………………………………………………………. 132

Автоматическое развертывание изменений в API……………………………………………………… 134

Упаковка приложения в контейнер Docker……………………………………………………………………………. 134

Проверка установки Docker…………………………………………………………………………………………. 135

Создание Dockerfile………………………………………………………………………………………………………. 135

Создание файла .dockerignore……………………………………………………………………………………… 137

Сборка образа контейнера………………………………………………………………………………………….. 137

Локальный запуск образа контейнера……………………………………………………………………….. 138

Развертывание в AWS……………………………………………………………………………………………………………… 139

Создание контейнерного Lightsail-сервиса………………………………………………………………… 139

Установка AWS CLI……………………………………………………………………………………………………… 140

Установка плагина Amazon Lightsail для работы с контейнерными сервисами…….. 140

Настройка параметров входа……………………………………………………………………………………… 140

Отправка нашего образа контейнера в Lightsail………………………………………………………… 141

Создание Lightsail-развертывания………………………………………………………………………………. 142

Обновление API-документации………………………………………………………………………………………………. 144

Дополнительные источники информации……………………………………………………………………………… 145

Резюме………………………………………………………………………………………………………………………………………. 145

Глава 7. Все включено: разработка Python SDK……………………………………. 147

SDK устраняют разрыв……………………………………………………………………………………………………………. 148

Выбор языка программирования для вашего SDK……………………………………………………………….. 151

Начнем с SDK с минимальным функционалом……………………………………………………………………… 152

Совет эксперта: упростите установку SDK……………………………………………………………….. 152

Совет эксперта: придайте SDK последовательность и идиоматичность………………… 153

Создание полнофункционального SDK…………………………………………………………………………………. 156

Совет эксперта: используйте разумные значения по умолчанию…………………………… 156

Совет эксперта: предоставьте полноценную функциональность……………………………. 159

Совет эксперта: ведите журнал событий…………………………………………………………………… 164

Совет эксперта: скрывайте сложности API……………………………………………………………….. 166

Совет эксперта: предоставляйте возможности bulk-загрузок………………………………….. 168

Совет эксперта: документируйте SDK……………………………………………………………………….. 171

Тестирование SDK………………………………………………………………………………………………………… 173

Совет эксперта: поддерживайте все задачи, реализуемые API……………………………….. 177

Завершение первой части нашего портфолио-проекта……………………………………………………….. 178

Дополнительные источники информации……………………………………………………………………………… 180

Резюме………………………………………………………………………………………………………………………………………. 180

Часть II. Использование API в проекте
по анализу данных……………………………………………………………………… 181

Глава 8. Что специалистам по анализу данных нужно знать об API…….. 183

Использование различных стилей API………………………………………………………………………………….. 183

Основы HTTP……………………………………………………………………………………………………………………………. 185

Как использовать API со всей ответственностью…………………………………………………………………. 187

Разделение ответственности: использование SDK или создание собственных клиентов для API        188

Как создаются API…………………………………………………………………………………………………………………… 190

Как тестируются API……………………………………………………………………………………………………………….. 190

Развертывание и контейнеризация API………………………………………………………………………………….. 191

Использование системы контроля версий……………………………………………………………………………… 191

Представление второй части портфолио-проекта……………………………………………………………….. 192

Приступаем к работе с GitHub Codespace…………………………………………………………………………….. 192

Клонирование репозитория части II………………………………………………………………………….. 192

Запуск вашей среды GitHub Codespace……………………………………………………………………… 193

Локальный запуск API SportsWorldCentral (SWC)………………………………………………………………… 194

Дополнительные источники информации……………………………………………………………………………… 196

Резюме………………………………………………………………………………………………………………………………………. 196

Глава 9. Использование API для аналитики данных……………………………. 197

Пользовательские метрики для спортивной аналитики……………………………………………………….. 197

Использование API в качестве источников данных для пользовательских метрик в фэнтези-аналитике          198

Создание пользовательской метрики: оценка Shark League (Лиги акул)…………………………… 199

Программные средства, используемые в данной главе……………………………………………………….. 200

httpx……………………………………………………………………………………………………………………………….. 200

Jupyter Notebooks………………………………………………………………………………………………………….. 201

pandas……………………………………………………………………………………………………………………………. 201

Установка новых библиотек в ваше кодовое пространство………………………………………………… 202

Запуск вашего API в кодовом пространстве…………………………………………………………………………. 202

Создание файла API-клиента…………………………………………………………………………………………………. 202

Создание блокнота Jupyter Notebook…………………………………………………………………………………….. 204

Добавление к блокноту общей конфигурации………………………………………………………………………. 205

Работа с данными вашего API………………………………………………………………………………………………… 207

Вычисление League Balance Score…………………………………………………………………………………………. 209

Вычисление League Juice Score………………………………………………………………………………………………. 211

Создание Shark League Score………………………………………………………………………………………………….. 212

Дополнительные источники информации……………………………………………………………………………… 213

Резюме………………………………………………………………………………………………………………………………………. 213

Глава 10. Использование API в конвейерах данных…………………………….. 215

Типы источников для конвейеров обработки данных………………………………………………………….. 215

Проектирование конвейера данных………………………………………………………………………………………. 216

Оркестрация конвейера данных с помощью Apache Airflow……………………………………………….. 217

Установка Apache Airflow в GitHub Codespaces……………………………………………………………………. 218

Создание локальной аналитической базы данных………………………………………………………………. 222

Запуск API в кодовом пространстве………………………………………………………………………………………. 222

Настройка Airflow-подключений……………………………………………………………………………………………. 222

Создание нашего первого DAG………………………………………………………………………………………………. 223

Создание совместно используемой функции………………………………………………………………………… 226

Запуск DAG………………………………………………………………………………………………………………………………. 228

Резюме………………………………………………………………………………………………………………………………………. 230

Глава 11. Обработка данных в приложениях Streamlit…………………………. 231

Привлечение пользователей с помощью интерактивной визуализации…………………………….. 231

Программные средства, используемые в данной главе……………………………………………………….. 232

nfl_data_py……………………………………………………………………………………………………………………. 232

Streamlit…………………………………………………………………………………………………………………………. 233

Установка Streamlit и nfl_data_py………………………………………………………………………………………….. 233

Запуск вашего API в кодовом пространстве…………………………………………………………………………. 233

Повторное использование файла API-клиента из главы 9…………………………………………………… 234

Создание Streamlit-приложения……………………………………………………………………………………………… 234

Обновление главного файла…………………………………………………………………………………………………… 234

Запуск Streamlit-приложения………………………………………………………………………………………………….. 235

Создание страницы с составами команд………………………………………………………………………………. 236

Создание страницы статистики команды……………………………………………………………………………… 239

Развертывание Streamlit-приложения…………………………………………………………………………………….. 242

Завершение второй части портфолио-проекта…………………………………………………………………….. 243

Дополнительные источники информации……………………………………………………………………………… 244

Резюме………………………………………………………………………………………………………………………………………. 245

Часть III. Использование API
с искусственным интеллектом……………………………………………. 247

Глава 12. Взаимосвязь API и искусственного интеллекта…………………….. 249

Точки пересечения ИИ и API…………………………………………………………………………………………………… 249

Проектирование API-интерфейсов для использования с генеративным ИИ
и большими языковыми моделями………………………………………………………………………………………….. 250

Определение искусственного интеллекта……………………………………………………………………………… 253

Генеративный ИИ и большие языковые модели……………………………………………………………………. 253

Создание агентных ИИ-приложений……………………………………………………………………………………… 254

Представление третьей части портфолио-проекта………………………………………………………………. 255

Запуск вашей среды GitHub Codespace…………………………………………………………………………………. 255

Клонирование репозитория части третьей………………………………………………………………… 255

Запуск вашей среды GitHub Codespace……………………………………………………………………… 256

Дополнительные источники информации……………………………………………………………………………… 257

Резюме………………………………………………………………………………………………………………………………………. 257

Глава 13. Развертывание API машинного обучения…………………………….. 259

Обучение моделей машинного обучения………………………………………………………………………………. 260

Программные средства, используемые в данной главе……………………………………………………….. 261

ONNX Runtime………………………………………………………………………………………………………………. 261

scikit-learn………………………………………………………………………………………………………………………. 262

sklearn-onnx…………………………………………………………………………………………………………………… 262

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

Использование процесса CRISP-DM……………………………………………………………………………………… 263

Осмысление бизнес-задачи…………………………………………………………………………………………………….. 263

Анализ данных…………………………………………………………………………………………………………………………. 264

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

Моделирование……………………………………………………………………………………………………………………….. 266

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

Развертывание………………………………………………………………………………………………………………………….. 269

Дополнительные источники информации……………………………………………………………………………… 277

Резюме………………………………………………………………………………………………………………………………………. 278

Глава 14. Использование API с LangChain……………………………………………. 279

Вызов искусственного интеллекта с использованием API (посредством LangChain)……….. 280

Создание LangGraph-агента…………………………………………………………………………………………………… 281

Регистрация в Anthropic……………………………………………………………………………………………….. 282

Запуск вашего кодового пространства GitHub………………………………………………………….. 283

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

Создание блокнота Jupyter Notebook…………………………………………………………………………………….. 284

Общение с LangGraph-агентом……………………………………………………………………………………………….. 287

Локальный запуск API SportsWorldCentral (SWC)………………………………………………………………… 288

Установка Software Development Kit (SDK) swcpy………………………………………………………………… 289

Создание набора инструментов LangChain………………………………………………………………………….. 289

Вызов API-интерфейсов с использованием ИИ (с применением LangGraph)……………………… 293

Общение с агентом (с использованием инструментов)………………………………………………………… 295

Дополнительные источники информации……………………………………………………………………………… 297

Резюме………………………………………………………………………………………………………………………………………. 297

Глава 15. Использование ChatGPT для вызова вашего API………………….. 299

Архитектура вашего приложения………………………………………………………………………………………….. 299

Начало работы с ChatGPT……………………………………………………………………………………………………… 300

Создание специализированной GPT………………………………………………………………………………………. 300

Запуск вашего кодового пространства GitHub…………………………………………………………………….. 303

Запуск SportsWorldCentral (SWC) API в кодовом пространстве GitHub……………………………… 304

Добавление в ваш OAS-файл раздела Servers……………………………………………………………………….. 305

Создание GPT-действия…………………………………………………………………………………………………………… 306

Тестирование API в вашем GPT……………………………………………………………………………………………… 308

Общение с вашим специализированным GPT……………………………………………………………………….. 309

Завершение третьей части вашего портфолио-проекта………………………………………………………. 311

Резюме………………………………………………………………………………………………………………………………………. 313

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

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

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

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

Новинка: “Языковые модели без лишних слов”

Языковые модели без лишних слов

Книга представляет собой лаконичное и в то же время исчерпывающее руководство по построению языковых моделей. Рассматриваются математические основы машинного обучения, векторные представления и работа нейронных сетей. Изложены принципы моделирования языка: от мешков слов и эмбеддингов до рекуррентных сетей и архитектуры трансформеров. Приводятся полные реализации  описанных моделей и методов на Python с использованием фреймворка PyTorch, включая примеры в виде Jupyter-блокнотов. Описаны методы обучения, тонкой настройки и оптимизации больших языковых моделей: LoRA, инженерия промптов, оценка качества, а также вопросы авторского права и этики. В заключительной главе даны направления для дальнейшего изучения: смесь экспертов, сжатие моделей, выравнивание на основе предпочтений, мультимодальные модели.

Для разработчиков и специалистов по языковым моделям

Эта книга развеяла для меня множество концептуальных неясностей в том, как на самом деле работает машинное обучение — она кристально ясная. Разобранные примеры и приложения в виде блокнотов Jupyter дали мне надежную отправную точку для дальнейших экспериментов. Даже если вы не планируете строить карьеру в области прикладного машинного обучения, эта книга станет прочным фундаментом для осмысления возможностей этих уникальных новых инструментов.
Винт Серф (Vint Cerf)— «отец Интернета», создатель протокола TCP/IP, лауреат премии Тьюринга, вице-президент Google.

Ключевые особенности книги:

  • Математические основы с понятными объяснениями
  • Полные реализации на Python с использованием PyTorch ( код доступен на GitHub)
  • Естественное продвижение от простых моделей к трансформерам
  • Практические блокноты Jupyter для каждой темы
  • Теория, иллюстрации и код в каждой главе

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

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

Вышла книга : “Qt 6.9. Профессиональное программирование на C++”

Qt 6.9. Профессиональное программирование на C++

Книга посвящена разработке приложений для Windows, macOS, Linux и iOS с использованием библиотеки Qt версии 6.9. Подробно рассмотрены возможности, предоставляемые этой библиотекой, и описаны особенности, выгодно отличающие ее от других библиотек. Описана интегрированная среда разработки Qt Creator и работа с технологией Qt Quick. Книга содержит исчерпывающую информацию о классах Qt 6, и даны практические рекомендации их применения, проиллюстрированные на большом количестве подробно прокомментированных примеров. Отдельно освещена тема искусственного интеллекта и показано, как использовать Qt 6 в эпоху ИИ: от управления ИИ-агентами до промт-инжиниринга с применением облачных и локальных моделей. Проекты и примеры из книги, дополнительные и редко востребованные главы в цифровом формате размещены на сайте издательства.

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

 

Платформно-независимая реализация приложений — это уже сегодняшний и завтрашний день программной индустрии. И эта книга станет вашим надежным путеводителем в эру Qt 6 и ИИ-разработки.

 

Книга подробно знакомит с библиотекой Qt 6.9, являющейся не только средством для создания пользовательских интерфейсов, но и позволяющей разрабатывать приложения практически любой сложности.
Недаром Qt широко используется многими организациями и компаниями, такими как Adobe, Amazon, AMD, Bosch, BMW, Canon, Cisco Systems, Disney, Intel, IBM, Panasonic, Parallels, Pioneer, Philips, Oracle, HP,  Google, Mercedes Benz, NASA, NEC, Neonway, Nokia, Rakuten, Samsung, Siemens, Sony, SUN, Tesla, Xerox, Xilinx, Yamaha и др.

Если вы хотите идти в ногу со временем, то вам без этой книги просто не обойтись, поскольку она является исчерпывающим пособием по созданию программ на Qt 6 с использованием C++ и QML.

  • Кросс-платформенная реализация приложений для Windows, macOS и Linux
  • ИИ-ассистенты, ИИ-IDE, промт-инжиниринг и агентные рабочие процессы: архитектура, код, тесты c локальными и облачными моделями
  • Разработка мобильных приложений для iOS
  • Программирование 2D- и 3D-графики, мультимедиа, веб-приложений, баз данных, сети, таймера, многопоточности, XML, QML и JavaScript
  • Среда разработки Qt Creator и работа с технологией Qt Quick
  • 240 завершенных программ и 16 практичных промптов для разработки с ИИ
Макс Шлее

Макс Шлее (Max Schlee) — закончил Университет прикладных наук в городе Кайзерлаутерн (Германия). Сооснователь компании Neonway по разработке программного обеспечения на Qt. Работал разработчиком программного обеспечения в фирмах THOMSON, Grass Valley, DigitalFilmTechnology, Goober Ltd. и Advancis. Эксперт в области объектно-ориентированного проектирования, специализирующийся на C++ и Qt. Создатель более 50 программ и приложений для Windows, macOS, iOS и Android. Увлечено занимается проектами в области программирования графики, звука и анализа финансовых рынков. Является автором ряда статей, научных докладов на международных конференциях по генеративному программированию пользовательского интерфейса. С 2022 года активно интегрирует современные ИИ-инструменты в процесс разработки: от архитектуры ПО до создания UI/UX прототипов, автоматизации тестирования и генерации контента. Автор книг «Qt 3/4/4.5/4.8/5.3/5.10. Профессиональное программирование на C++» и др. Связаться с автором можно по адресу электронной почты Max.Schlee@neonway.com или через страницу информационной поддержки книги www.qt-book.com.

Книгу “Qt 6.9. Профессиональное программирование на C++” можно купить в нашем интенет-магазине.

Предисловие Маттиаса Эттриха к первому изданию……………………………… 26

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

Предисловие автора……………………………………………………………………………….. 29

Структура книги………………………………………………………………………………………………………………………… 30

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

Часть II. Элементы управления………………………………………………………………………………………… 31

Часть III. События и взаимодействие с пользователем………………………………………………….. 32

Часть IV. Графика и звук…………………………………………………………………………………………………… 32

Часть V. Создание приложений………………………………………………………………………………………… 33

Часть VI. Особые возможности Qt……………………………………………………………………………………. 34

Часть VII. Язык сценариев JavaScript………………………………………………………………………………. 35

Часть VIII. Технология Qt Quick……………………………………………………………………………………….. 36

Часть IX. Мобильные приложения и Qt……………………………………………………………………………. 37

Часть X. Qt и ИИ…………………………………………………………………………………………………………………. 37

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

Файловый архив…………………………………………………………………………………………………………………. 38

Введение………………………………………………………………………………………………… 39

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

Глава 1. Обзор иерархии классов Qt………………………………………………………. 52

Первая программа на Qt……………………………………………………………………………………………………………. 52

Модули Qt…………………………………………………………………………………………………………………………………… 53

Пространство имен Qt……………………………………………………………………………………………………….. 55

Модуль QtCore…………………………………………………………………………………………………………………… 55

Модуль QtGui……………………………………………………………………………………………………………………… 56

Модуль QtWidgets………………………………………………………………………………………………………………. 56

Модули QtQuick и QtQML………………………………………………………………………………………………….. 58

Модуль QtNetwork……………………………………………………………………………………………………………… 58

Модули QtXml…………………………………………………………………………………………………………………….. 58

Модуль QtSql……………………………………………………………………………………………………………………… 58

Модули QtMultimedia и QtMultimediaWidgets…………………………………………………………………. 58

Модуль QtSvg……………………………………………………………………………………………………………………… 59

Дополнительные модули Qt……………………………………………………………………………………………………… 59

Резюме…………………………………………………………………………………………………………………………………………. 60

Глава 2. Философия объектной модели………………………………………………….. 61

Механизм сигналов и слотов……………………………………………………………………………………………………. 64

Сигналы………………………………………………………………………………………………………………………………. 67

Слоты………………………………………………………………………………………………………………………………….. 69

Соединение объектов…………………………………………………………………………………………………………. 70

Новый синтаксис соединений………………………………………………………………………………….. 70

Классический синтаксис соединений……………………………………………………………………… 70

Разъединение объектов……………………………………………………………………………………………………… 75

Переопределение сигналов……………………………………………………………………………………………….. 76

Организация объектных иерархий…………………………………………………………………………………………… 77

Метаобъектная информация…………………………………………………………………………………………………….. 80

Резюме…………………………………………………………………………………………………………………………………………. 80

Глава 3. Работа с Qt……………………………………………………………………………….. 82

Интегрированная среда разработки………………………………………………………………………………………… 82

Программа Qt Assistant……………………………………………………………………………………………………………… 82

Работа с системами сборки………………………………………………………………………………………………………. 84

Работа с CMake………………………………………………………………………………………………………………….. 84

Работа с qmake…………………………………………………………………………………………………………………… 85

Как перейти с qmake на CMake в Qt 6?……………………………………………………………………………. 87

Рекомендации для проекта с Qt………………………………………………………………………………………………… 88

Метаобъектный компилятор MOC…………………………………………………………………………………………… 89

Компилятор ресурсов RCC……………………………………………………………………………………………………….. 90

Структура Qt-проекта……………………………………………………………………………………………………………….. 91

Методы отладки………………………………………………………………………………………………………………………… 91

Прочие методы отладки…………………………………………………………………………………………………….. 92

Глобальные определения Qt…………………………………………………………………………………………………….. 96

Информация о библиотеке Qt……………………………………………………………………………………………………. 97

Резюме…………………………………………………………………………………………………………………………………………. 98

Глава 4. Библиотека контейнеров………………………………………………………… 100

Контейнерные классы……………………………………………………………………………………………………………… 101

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

Итераторы в стиле Java…………………………………………………………………………………………………… 103

Итераторы в стиле STL……………………………………………………………………………………………………. 104

Современный стиль итерации с range-based for……………………………………………………………. 105

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

Ключевое слово foreach………………………………………………………………………………………………….. 106

Последовательные контейнеры……………………………………………………………………………………………… 107

Массив байтов: класс QByteArray…………………………………………………………………………. 108

Массив битов: класс QBitArray……………………………………………………………………………… 109

Списки QList<T>………………………………………………………………………………………………………………. 109

Стек: класс QStack<T>……………………………………………………………………………………………………. 110

Очередь: класс QQueue<T>…………………………………………………………………………………………….. 111

Ассоциативные контейнеры……………………………………………………………………………………………………. 112

Словари QMap<K,T> и QMultiMap<K,T>…………………………………………………………………….. 112

Хеши QHash<K,T> и QMultiHash<K,T>………………………………………………………………………… 114

Множество QSet<T>………………………………………………………………………………………………………… 115

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

Сортировка……………………………………………………………………………………………………………………….. 117

Поиск…………………………………………………………………………………………………………………………………. 118

Сравнение…………………………………………………………………………………………………………………………. 118

Заполнение значениями…………………………………………………………………………………………………… 118

Копирование значений элементов………………………………………………………………………………….. 119

Подсчет значений…………………………………………………………………………………………………………….. 119

Строки………………………………………………………………………………………………………………………………………. 119

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

Произвольный тип: класс QVariant………………………………………………………………………………………… 124

Модель общего использования данных………………………………………………………………………………… 125

Резюме………………………………………………………………………………………………………………………………………. 126

Часть II. Элементы управления………………………………………………. 127

Глава 5. С чего начинаются элементы управления?…………………………….. 128

Класс QWidget………………………………………………………………………………………………………………………….. 128

Размеры и координаты виджета……………………………………………………………………………………… 131

Механизм закулисного хранения…………………………………………………………………………………… 132

Установка фона виджета…………………………………………………………………………………………………. 132

Изменение указателя мыши…………………………………………………………………………………………….. 133

Стек виджетов………………………………………………………………………………………………………………………….. 136

Рамки…………………………………………………………………………………………………………………………………………. 136

Виджет видовой прокрутки…………………………………………………………………………………………………….. 137

Резюме………………………………………………………………………………………………………………………………………. 139

Глава 6. Управление автоматическим размещением элементов……………. 141

Менеджеры компоновки (layout managers)……………………………………………………………………………. 141

Горизонтальное и вертикальное размещение……………………………………………………………….. 143

Класс QBoxLayout…………………………………………………………………………………………………… 143

Горизонтальное размещение QHBoxLayout…………………………………………………………. 145

Вертикальное размещение QVBoxLayout……………………………………………………………… 146

Вложенные размещения………………………………………………………………………………………………….. 147

Табличное размещение QGridLayout……………………………………………………………………………… 148

Размещение в виде формы: класс QFormLayout…………………………………………………………….. 153

Порядок следования табулятора……………………………………………………………………………………………. 154

Разделители: класс QSplitter…………………………………………………………………………………………………… 155

Резюме………………………………………………………………………………………………………………………………………. 156

Глава 7. Элементы отображения…………………………………………………………… 158

Надписи……………………………………………………………………………………………………………………………………. 158

Управление выравниванием текста……………………………………………………………………………….. 158

Отображение HTML-содержимого………………………………………………………………………………… 159

Отображение графической информации……………………………………………………………………….. 160

Взаимодействие с другими виджетами………………………………………………………………………….. 161

Использование гиперссылок…………………………………………………………………………………………… 162

Отображение числовых значений………………………………………………………………………………….. 163

Выделение и копирования текста…………………………………………………………………………………… 163

Индикатор выполнения…………………………………………………………………………………………………………… 163

Индикатор бесконечного выполнения……………………………………………………………………………. 165

Электронный индикатор…………………………………………………………………………………………………………. 166

Ограничения электронного индикатора………………………………………………………………………… 168

Резюме………………………………………………………………………………………………………………………………………. 168

Глава 8. Кнопки, флажки и переключатели…………………………………………. 169

С чего начинаются кнопки? Класс QAbstractButton…………………………………………………………….. 169

Установка текста и изображения……………………………………………………………………………………. 169

Взаимодействие с пользователем…………………………………………………………………………………… 169

Опрос состояния………………………………………………………………………………………………………………. 170

Кнопки………………………………………………………………………………………………………………………………………. 170

Флажки……………………………………………………………………………………………………………………………………… 173

Переключатели………………………………………………………………………………………………………………………… 174

Группировка кнопок………………………………………………………………………………………………………………… 175

Резюме………………………………………………………………………………………………………………………………………. 178

Глава 9. Элементы настройки………………………………………………………………. 180

Класс QAbstractSlider……………………………………………………………………………………………………………… 180

Изменение положения……………………………………………………………………………………………………… 180

Установка диапазона………………………………………………………………………………………………………. 180

Установка шага………………………………………………………………………………………………………………… 181

Установка и получение значений…………………………………………………………………………………… 181

Ползунок…………………………………………………………………………………………………………………………………… 181

Полоса прокрутки……………………………………………………………………………………………………………………. 183

Установщик………………………………………………………………………………………………………………………………. 184

Резюме………………………………………………………………………………………………………………………………………. 185

Глава 10. Элементы ввода……………………………………………………………………. 187

Однострочное текстовое поле………………………………………………………………………………………………… 187

Редактор текста……………………………………………………………………………………………………………………….. 189

Запись в файл……………………………………………………………………………………………………………………. 191

Расцветка синтаксиса (syntax highlighting)…………………………………………………………………….. 192

С чего начинаются виджеты счетчиков?……………………………………………………………………………….. 198

Счетчик……………………………………………………………………………………………………………………………… 199

Элемент ввода даты и времени……………………………………………………………………………………….. 200

Проверка ввода………………………………………………………………………………………………………………………… 200

Резюме………………………………………………………………………………………………………………………………………. 202

Глава 11. Элементы выбора…………………………………………………………………. 203

Простой список………………………………………………………………………………………………………………………… 203

Вставка элементов…………………………………………………………………………………………………………… 203

Выбор элементов пользователем……………………………………………………………………………………. 205

Изменение элементов пользователем…………………………………………………………………………….. 205

Режим пиктограмм……………………………………………………………………………………………………………. 205

Сортировка элементов…………………………………………………………………………………………………….. 206

Иерархические списки…………………………………………………………………………………………………………….. 206

Сортировка элементов…………………………………………………………………………………………………….. 209

Таблицы……………………………………………………………………………………………………………………………………. 210

Выпадающий список……………………………………………………………………………………………………………….. 211

Вкладки…………………………………………………………………………………………………………………………………….. 213

Виджет панели инструментов………………………………………………………………………………………………… 214

Резюме………………………………………………………………………………………………………………………………………. 215

Глава 12. Интервью, или модель-представление…………………………………… 216

Концепция………………………………………………………………………………………………………………………………… 217

Модель………………………………………………………………………………………………………………………………. 218

Представление………………………………………………………………………………………………………………….. 219

Выделение элемента………………………………………………………………………………………………………… 220

Делегат……………………………………………………………………………………………………………………………… 222

Индексы модели……………………………………………………………………………………………………………………….. 224

Иерархические данные……………………………………………………………………………………………………………. 225

Роли элементов………………………………………………………………………………………………………………………… 229

Создание собственных моделей данных……………………………………………………………………………….. 230

Промежуточная модель данных (Proxy model)…………………………………………………………………….. 238

Модель элементно-ориентированных классов…………………………………………………………………….. 240

Резюме………………………………………………………………………………………………………………………………………. 242

Глава 13. Цветовая палитра элементов управления……………………………… 244

Поддержка тёмных тем……………………………………………………………………………………………………………. 247

Резюме………………………………………………………………………………………………………………………………………. 248

Часть III. События и взаимодействие с пользователем. 249

Глава 14. События……………………………………………………………………………….. 250

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

События клавиатуры……………………………………………………………………………………………………….. 252

Класс QKeyEvent…………………………………………………………………………………………………….. 252

Класс QFocusEvent…………………………………………………………………………………………………. 255

Событие обновления контекста рисования: класс QPaintEvent………………………………….. 255

События мыши…………………………………………………………………………………………………………………. 256

Класс QMouseEvent………………………………………………………………………………………………… 256

Класс QWheelEvent…………………………………………………………………………………………………. 260

Методы enterEvent() и leaveEvent()……………………………………………………………………….. 261

Событие таймера: класс QTimerEvent……………………………………………………………………………. 261

События перетаскивания (drag & drop)………………………………………………………………………….. 261

Класс QDragEnterEvent………………………………………………………………………………………….. 261

Класс QDragLeaveEvent…………………………………………………………………………………………. 262

Класс QDragMoveEvent………………………………………………………………………………………….. 262

Класс QDropEvent…………………………………………………………………………………………………… 262

Остальные классы событий…………………………………………………………………………………………….. 262

Класс QChildEvent………………………………………………………………………………………………….. 262

Класс QCloseEvent………………………………………………………………………………………………….. 262

Класс QHideEvent……………………………………………………………………………………………………. 262

Класс QMoveEvent………………………………………………………………………………………………….. 262

Класс QShowEvent………………………………………………………………………………………………….. 263

Класс QResizeEvent…………………………………………………………………………………………………. 263

Реализация собственных классов событий…………………………………………………………………………… 264

Переопределение метода event()…………………………………………………………………………………………….. 264

Мультитач………………………………………………………………………………………………………………………………… 267

Сохранение работоспособности приложения………………………………………………………………………. 272

Резюме………………………………………………………………………………………………………………………………………. 272

Глава 15. Фильтры событий…………………………………………………………………. 274

Реализация фильтров событий……………………………………………………………………………………………….. 274

Использование лямбда-выражений с фильтрами событий………………………………………………….. 277

Резюме………………………………………………………………………………………………………………………………………. 278

Глава 16. Искусственное создание событий…………………………………………. 279

Резюме………………………………………………………………………………………………………………………………………. 282

Часть IV. Графика и звук…………………………………………………………….. 285

Глава 17. Введение в компьютерную графику……………………………………… 286

Классы геометрии……………………………………………………………………………………………………………………. 286

Точка…………………………………………………………………………………………………………………………………. 286

Двумерный размер…………………………………………………………………………………………………………… 287

Прямоугольник…………………………………………………………………………………………………………………. 289

Прямая линия……………………………………………………………………………………………………………………. 289

Многоугольник…………………………………………………………………………………………………………………. 290

Цвет…………………………………………………………………………………………………………………………………………… 290

Класс QСolor……………………………………………………………………………………………………………………. 291

Цветовая модель RGB……………………………………………………………………………………………………… 291

Цветовая модель HSV………………………………………………………………………………………………………. 292

Цветовая модель HSL………………………………………………………………………………………………………. 294

Цветовая модель CMYK………………………………………………………………………………………………….. 295

Палитра…………………………………………………………………………………………………………………………….. 296

Предопределенные цвета………………………………………………………………………………………………… 296

Резюме………………………………………………………………………………………………………………………………………. 297

Глава 18. Легенда о короле Артуре и контекст рисования……………………. 299

Класс QPainter…………………………………………………………………………………………………………………………. 301

Перья и кисти……………………………………………………………………………………………………………………………. 302

Перо…………………………………………………………………………………………………………………………………… 302

Кисть…………………………………………………………………………………………………………………………………. 303

Градиенты………………………………………………………………………………………………………………………………… 304

Техника сглаживания (Anti-aliasing)………………………………………………………………………………………. 306

Рисование…………………………………………………………………………………………………………………………………. 307

Рисование точек……………………………………………………………………………………………………………….. 308

Рисование линий………………………………………………………………………………………………………………. 308

Рисование сплошных прямоугольников………………………………………………………………………… 309

Рисование заполненных фигур……………………………………………………………………………………….. 310

Запись команд рисования……………………………………………………………………………………………………….. 313

Трансформация систем координат………………………………………………………………………………………… 313

Перемещение…………………………………………………………………………………………………………………….. 314

Масштабирование…………………………………………………………………………………………………………… 314

Поворот…………………………………………………………………………………………………………………………….. 315

Скос…………………………………………………………………………………………………………………………………… 315

Трансформационные матрицы……………………………………………………………………………………….. 315

Графическая траектория (painter path)………………………………………………………………………………….. 316

Отсечения…………………………………………………………………………………………………………………………………. 317

Режим совмещения (composition mode)………………………………………………………………………………….. 318

Графические эффекты……………………………………………………………………………………………………………… 321

Диагностика проблем с рисованием………………………………………………………………………………………. 323

Резюме………………………………………………………………………………………………………………………………………. 323

Глава 19. Растровые изображения………………………………………………………… 325

Форматы графических файлов……………………………………………………………………………………………….. 325

Формат BMP…………………………………………………………………………………………………………………….. 325

Формат GIF……………………………………………………………………………………………………………………….. 326

Формат PNG……………………………………………………………………………………………………………………… 326

Формат JPEG…………………………………………………………………………………………………………………….. 326

Формат WEBP…………………………………………………………………………………………………………………… 326

Формат XPM…………………………………………………………………………………………………………………….. 326

Контекстно-независимое представление………………………………………………………………………………. 328

Класс QImage……………………………………………………………………………………………………………………. 328

Класс QImage как контекст рисования…………………………………………………………………………… 335

Контекстно-зависимое представление…………………………………………………………………………………… 337

Класс QPixmap…………………………………………………………………………………………………………………. 337

Класс QPixmapCache……………………………………………………………………………………………………….. 338

Класс QBitmap………………………………………………………………………………………………………………….. 339

Создание нестандартного окна виджета……………………………………………………………………….. 339

Резюме………………………………………………………………………………………………………………………………………. 341

Глава 20. Работа со шрифтами……………………………………………………………… 342

Отображение строки……………………………………………………………………………………………………………….. 344

Резюме………………………………………………………………………………………………………………………………………. 347

Глава 21. Графическое представление………………………………………………….. 348

Сцена………………………………………………………………………………………………………………………………………… 349

Представление…………………………………………………………………………………………………………………………. 350

Элемент…………………………………………………………………………………………………………………………………….. 350

Определение столкновений элементов…………………………………………………………………………… 353

События……………………………………………………………………………………………………………………………………. 354

Виджеты в графическом представлении……………………………………………………………………………….. 358

Резюме………………………………………………………………………………………………………………………………………. 360

Глава 22. Анимация……………………………………………………………………………… 362

Класс QMovie…………………………………………………………………………………………………………………………… 362

SVG-графика…………………………………………………………………………………………………………………………….. 363

Анимационный движок и машина состояний……………………………………………………………………….. 365

Смягчающие линии………………………………………………………………………………………………………….. 367

Настройка кривых Безье и TCB-сплайнов…………………………………………………………………….. 373

Машина состояний и переходы……………………………………………………………………………………… 373

Резюме………………………………………………………………………………………………………………………………………. 375

Глава 23. Работа с OpenGL…………………………………………………………………… 377

Основные положения OpenGL………………………………………………………………………………………………… 377

Реализация OpenGL-программы…………………………………………………………………………………………….. 379

Разворачивание OpenGL-программ во весь экран………………………………………………………………… 382

Графические примитивы OpenGL…………………………………………………………………………………………… 382

Трехмерная графика………………………………………………………………………………………………………………… 385

Резюме………………………………………………………………………………………………………………………………………. 390

Глава 24. Вывод на печать…………………………………………………………………… 391

Класс QPrinter………………………………………………………………………………………………………………………….. 391

Многостраничная печать………………………………………………………………………………………………… 396

Резюме………………………………………………………………………………………………………………………………………. 397

Глава 25. Разработка собственных элементов управления…………………… 398

Примеры создания виджетов………………………………………………………………………………………………….. 398

Лучшие практики при создании собственных виджетов……………………………………………………… 403

Резюме………………………………………………………………………………………………………………………………………. 404

Глава 26. Элементы со стилем………………………………………………………………. 405

Встроенные стили……………………………………………………………………………………………………………………. 407

Поддержка темной темы…………………………………………………………………………………………………………. 411

Создание собственных стилей……………………………………………………………………………………………….. 411

Методы рисования элементов управления……………………………………………………………………………. 412

Метод рисования простых элементов управления……………………………………………………….. 412

Метод рисования основных элементов управления…………………………………………………….. 413

Метод рисования составных элементов управления……………………………………………………. 413

Реализация стиля простого элемента управления………………………………………………………… 413

Использование каскадных стилей документа………………………………………………………………………. 417

Основные положения……………………………………………………………………………………………………….. 417

Изменение подэлементов…………………………………………………………………………………………………. 419

Управление состояниями………………………………………………………………………………………………… 420

Пример………………………………………………………………………………………………………………………………. 421

Резюме………………………………………………………………………………………………………………………………………. 425

Глава 27. Мультимедиа………………………………………………………………………… 426

Звук……………………………………………………………………………………………………………………………………………. 426

Воспроизведение звуковых эффектов: класс QSoundEffect………………………………………….. 427

Воспроизведение мультимедиа: класс QMediaPlayer………………………………………………….. 427

Создание аудиоплеера…………………………………………………………………………………………… 428

Видео и класс QMediaPlayer…………………………………………………………………………………………… 434

Обработка ошибок в мультимедийных приложениях………………………………………………….. 437

Поддержка камеры…………………………………………………………………………………………………………… 437

Запись медиаконтента…………………………………………………………………………………………………….. 438

Резюме………………………………………………………………………………………………………………………………………. 439

Часть V. Создание приложений………………………………………………. 441

Глава 28. Сохранение настроек приложения………………………………………… 442

Улучшенный доступ к данным……………………………………………………………………………………………….. 449

Резюме………………………………………………………………………………………………………………………………………. 450

Глава 29. Буфер обмена и перетаскивание…………………………………………… 451

Буфер обмена…………………………………………………………………………………………………………………………… 451

Перетаскивание……………………………………………………………………………………………………………………….. 452

Реализация drag………………………………………………………………………………………………………………… 454

Реализация drop……………………………………………………………………………………………………………….. 456

Создание собственных типов перетаскивания……………………………………………………………… 458

Практические советы по работе с буфером обмена и перетаскиванием……………………………. 463

Резюме………………………………………………………………………………………………………………………………………. 464

Глава 30. Интернационализация приложения (см. эл. архив)…………… 1

Подготовка приложения к интернационализации…………………………………………………………. 1

Утилита lupdate………………………………………………………………………………………………………………… 4

Программа Qt Linguist………………………………………………………………………………………………………. 5

Утилита lrelease. Пример программы, использующей перевод…………………………………….. 7

Смена перевода в процессе работы программы……………………………………………………………. 9

Завершающие размышления…………………………………………………………………………………………. 12

Резюме……………………………………………………………………………………………………………………………… 13

Глава 31. Создание меню……………………………………………………………………… 466

«Анатомия» меню…………………………………………………………………………………………………………………….. 466

Контекстные меню…………………………………………………………………………………………………………………… 470

Резюме………………………………………………………………………………………………………………………………………. 471

Глава 32. Диалоговые окна………………………………………………………………….. 473

Правила создания диалоговых окон……………………………………………………………………………………… 473

Класс QDialog………………………………………………………………………………………………………………………….. 474

Модальные диалоговые окна…………………………………………………………………………………………. 474

Немодальные диалоговые окна……………………………………………………………………………………… 475

Создание собственного диалогового окна…………………………………………………………………….. 476

Стандартные диалоговые окна………………………………………………………………………………………………. 479

Диалоговое окно выбора файлов……………………………………………………………………………………. 479

Диалоговое окно настройки принтера…………………………………………………………………………… 483

Диалоговое окно выбора цвета………………………………………………………………………………………. 484

Диалоговое окно выбора шрифта…………………………………………………………………………………… 485

Диалоговое окно ввода……………………………………………………………………………………………………. 486

Диалоговое окно процесса……………………………………………………………………………………………… 487

Диалоговые окна мастера……………………………………………………………………………………………….. 488

Диалоговые окна сообщений………………………………………………………………………………………………….. 489

Окно информационного сообщения……………………………………………………………………………….. 492

Окно предупреждающего сообщения…………………………………………………………………………….. 492

Окно критического сообщения……………………………………………………………………………………….. 492

Окно сообщения о программе…………………………………………………………………………………………. 493

Окно сообщения About Qt………………………………………………………………………………………………… 493

Окно сообщения об ошибке…………………………………………………………………………………………….. 493

Резюме………………………………………………………………………………………………………………………………………. 494

Глава 33. Предоставление помощи………………………………………………………. 496

Всплывающая подсказка………………………………………………………………………………………………………… 496

Система помощи (Online Help)………………………………………………………………………………………………… 498

Использование QAssistant……………………………………………………………………………………………………….. 500

Резюме………………………………………………………………………………………………………………………………………. 501

Глава 34. Главное окно, создание SDI- и MDI-приложений………………….. 503

Класс главного окна QMainWindow………………………………………………………………………………………. 503

Класс действия QAction…………………………………………………………………………………………………………… 504

Панель инструментов………………………………………………………………………………………………………………. 505

Доки…………………………………………………………………………………………………………………………………………… 507

Строка состояния…………………………………………………………………………………………………………………….. 508

Окно заставки…………………………………………………………………………………………………………………………… 509

SDI- и MDI-приложения………………………………………………………………………………………………………….. 511

SDI-приложение……………………………………………………………………………………………………………….. 512

MDI-приложение……………………………………………………………………………………………………………… 517

Резюме………………………………………………………………………………………………………………………………………. 525

Глава 35. Рабочий стол (Desktop)………………………………………………………….. 527

Область уведомлений……………………………………………………………………………………………………………… 527

Работа с экранами…………………………………………………………………………………………………………………… 532

Центрирование окна на экране………………………………………………………………………………………. 532

Получение списка экранов……………………………………………………………………………………………… 532

Работа с координатами и экранами……………………………………………………………………………….. 533

Сигналы QScreen……………………………………………………………………………………………………………… 533

Пример: приложение для захвата экрана……………………………………………………………………… 533

Класс сервиса рабочего стола……………………………………………………………………………………………….. 536

Резюме………………………………………………………………………………………………………………………………………. 536

Часть VI. Особые возможности Qt………………………………………… 537

Глава 36. Работа с файлами, каталогами и потоками ввода/вывода…….. 538

Ввод/вывод: класс QIODevice…………………………………………………………………………………………………. 538

Работа с файлами: класс QFile………………………………………………………………………………………………. 540

Класс QBuffer……………………………………………………………………………………………………………………. 542

Класс QTemporaryFile……………………………………………………………………………………………………… 542

Работа с каталогами: класс QDir…………………………………………………………………………………………… 543

Просмотр содержимого каталога…………………………………………………………………………………… 543

Получение путей к стандартным каталогам…………………………………………………………………. 546

Информация о файлах: класс QFileInfo…………………………………………………………………………………. 547

Файл или каталог?…………………………………………………………………………………………………………… 548

Путь и имя файла……………………………………………………………………………………………………………… 548

Информация о дате и времени………………………………………………………………………………………… 548

Получение атрибутов файла…………………………………………………………………………………………… 548

Определение размера файла…………………………………………………………………………………………… 549

Наблюдение за файлами и каталогами…………………………………………………………………………………. 549

Потоки ввода/вывода………………………………………………………………………………………………………………. 551

Класс QTextStream……………………………………………………………………………………………………………. 551

Класс QDataStream………………………………………………………………………………………………………….. 552

Информация о хранилищах……………………………………………………………………………………………………. 553

Резюме………………………………………………………………………………………………………………………………………. 553

Глава 37. Дата, время и таймер…………………………………………………………….. 555

Дата и время…………………………………………………………………………………………………………………………….. 555

Класс даты QDate…………………………………………………………………………………………………………….. 555

Класс времени: QTime……………………………………………………………………………………………………… 557

Класс даты и времени: QDateTime………………………………………………………………………………….. 558

Таймер………………………………………………………………………………………………………………………………………. 558

Событие таймера……………………………………………………………………………………………………………… 559

Класс QTimer…………………………………………………………………………………………………………………….. 561

Класс QBasicTimer……………………………………………………………………………………………………………. 563

Работа с временнми зонами………………………………………………………………………………………….. 563

Резюме………………………………………………………………………………………………………………………………………. 564

Глава 38. Процессы и потоки……………………………………………………………….. 565

Процессы………………………………………………………………………………………………………………………………….. 565

Потоки………………………………………………………………………………………………………………………………………. 568

Подход 1: наследование от QThread……………………………………………………………………………… 570

Подход 2: перемещение объекта в поток……………………………………………………………………….. 570

Приоритеты………………………………………………………………………………………………………………………. 571

Обмен сообщениями………………………………………………………………………………………………………… 571

Сигнально-слотовые соединения………………………………………………………………………….. 572

Отправка событий…………………………………………………………………………………………………… 577

Синхронизация…………………………………………………………………………………………………………………. 579

Мьютексы………………………………………………………………………………………………………………… 580

Семафоры………………………………………………………………………………………………………………… 581

Ожидание условий………………………………………………………………………………………………….. 582

Блокировка чтения/записи…………………………………………………………………………………….. 583

Возникновение тупиковых ситуаций…………………………………………………………………….. 583

Фреймворк QtConcurrent…………………………………………………………………………………………………………. 584

Цепочки операций……………………………………………………………………………………………………………. 586

Поддержка лямбда-выражений………………………………………………………………………………………. 586

Класс QPromise………………………………………………………………………………………………………………… 586

Резюме………………………………………………………………………………………………………………………………………. 587

Глава 39. Программирование поддержки сети……………………………………… 589

Сокетное соединение………………………………………………………………………………………………………………. 589

Модель «клиент-сервер»………………………………………………………………………………………………….. 590

Реализация TCP-сервера…………………………………………………………………………………………………. 591

Реализация TCP-клиента…………………………………………………………………………………………………. 596

Реализация UDP-сервера и UDP-клиента………………………………………………………………………………. 601

Управление доступом к сети…………………………………………………………………………………………………… 604

Блокирующий подход……………………………………………………………………………………………………………… 610

Режим прокси……………………………………………………………………………………………………………………………. 613

Информация о хосте………………………………………………………………………………………………………………… 613

Есть ли соединение с Интернетом?………………………………………………………………………………………… 614

Новый HTTP-стек…………………………………………………………………………………………………………………….. 615

Протокол WebSocket……………………………………………………………………………………………………………….. 616

Резюме………………………………………………………………………………………………………………………………………. 617

Глава 40. Работа с XML, JSON и Protobuf…………………………………………….. 619

Формат XML…………………………………………………………………………………………………………………………….. 619

Основные понятия и структура XML-документа………………………………………………………….. 619

XML и Qt…………………………………………………………………………………………………………………………… 621

Работа с DOM…………………………………………………………………………………………………………………… 621

Чтение XML-документа………………………………………………………………………………………….. 622

Создание и запись XML-документа………………………………………………………………………. 624

Работа с SAX…………………………………………………………………………………………………………………….. 626

Чтение XML-документа………………………………………………………………………………………….. 626

Классы QXmlStreamReader и QXmlStreamWriter……………………………………………………………. 629

Чтение XML с помощью QXmlStreamReader………………………………………………………… 629

Запись XML с помощью QXmlStreamWriter………………………………………………………….. 630

Формат JSON……………………………………………………………………………………………………………………………. 631

Основные классы для работы с JSON…………………………………………………………………………….. 631

Чтение JSON-файла………………………………………………………………………………………………………….. 632

Запись JSON-файла………………………………………………………………………………………………………….. 633

Формат Protobuf………………………………………………………………………………………………………………………. 635

Схема данных (proto-файл)…………………………………………………………………………………………….. 635

Создание файла с Protobuf-данными……………………………………………………………………………… 636

Чтение Protobuf-данных………………………………………………………………………………………………….. 637

Рекомендации по выбору………………………………………………………………………………………………………… 638

Резюме………………………………………………………………………………………………………………………………………. 639

Глава 41. Программирование баз данных…………………………………………….. 641

Основные положения SQL………………………………………………………………………………………………………. 641

Создание таблицы……………………………………………………………………………………………………………. 642

Операция вставки…………………………………………………………………………………………………………….. 642

Чтение данных………………………………………………………………………………………………………………….. 642

Изменение данных……………………………………………………………………………………………………………. 643

Удаление…………………………………………………………………………………………………………………………… 643

Использование языка SQL в библиотеке Qt…………………………………………………………………………… 643

Соединение с базой данных (второй уровень)………………………………………………………………. 645

Исполнение команд SQL (второй уровень)……………………………………………………………………. 646

Классы SQL-моделей для интервью (третий уровень)………………………………………………….. 649

Модель запроса………………………………………………………………………………………………………. 649

Табличная модель…………………………………………………………………………………………………… 650

Реляционная модель……………………………………………………………………………………………….. 652

Резюме………………………………………………………………………………………………………………………………………. 653

Глава 42. Динамические библиотеки и система расширений
(см. эл. архив)
…………………………………………………………………………………… 1

Динамические библиотеки………………………………………………………………………………………………. 1

Динамическая загрузка и выгрузка библиотеки…………………………………………………….. 3

Особенности именования и загрузки динамических библиотек………………….. 5

Расширения (plug-ins)……………………………………………………………………………………………………….. 6

Расширения для Qt……………………………………………………………………………………………………. 7

Поддержка собственных расширений в приложениях………………………………………….. 8

Диагностика и отладка расширений……………………………………………………………. 12

Создание расширения для приложения………………………………………………………. 13

Система метаданных плагинов……………………………………………………………………. 15

Резюме……………………………………………………………………………………………………………………………… 16

Глава 43. Совместное использование Qt с платформозависимыми API
(см. эл. архив)
…………………………………………………………………………………… 1

Совместное использование с Windows API…………………………………………………………………….. 3

Совместное использование с Linux…………………………………………………………………………………. 5

Совместное использование с macOS………………………………………………………………………………. 5

Системная информация……………………………………………………………………………………………………. 6

Резюме……………………………………………………………………………………………………………………………….. 8

Глава 44. Qt Designer. Быстрая разработка прототипов……………………….. 657

Создание новой формы в Qt Designer……………………………………………………………………………………… 657

Добавление виджетов……………………………………………………………………………………………………………… 660

Компоновка (layout)………………………………………………………………………………………………………………… 661

Порядок следования табулятора……………………………………………………………………………………………. 662

Сигналы и слоты……………………………………………………………………………………………………………………… 663

Использование в формах собственных виджетов…………………………………………………………………. 665

Использование форм в проектах…………………………………………………………………………………………….. 666

Компиляция………………………………………………………………………………………………………………………………. 668

Динамическая загрузка формы………………………………………………………………………………………………. 669

Резюме………………………………………………………………………………………………………………………………………. 672

Глава 45. Проведение тестов (см. эл. архив)……………………………………… 1

Создание тестов………………………………………………………………………………………………………………… 2

Тесты с передачей данных………………………………………………………………………………………. 5

Создание тестов графического интерфейса…………………………………………………………………… 7

Параметры для запуска тестов……………………………………………………………………………………….. 9

Резюме……………………………………………………………………………………………………………………………… 10

Глава 46. Qt WebEngine………………………………………………………………………… 674

А зачем?……………………………………………………………………………………………………………………………………. 675

Быстрый старт…………………………………………………………………………………………………………………………. 676

Создание простого веб-браузера…………………………………………………………………………………………… 678

Ввод адресов…………………………………………………………………………………………………………………….. 678

Управление историей………………………………………………………………………………………………………. 678

Загрузка страниц и ресурсов………………………………………………………………………………………….. 679

Пишем веб-браузер: попытка номер два……………………………………………………………………….. 679

Резюме………………………………………………………………………………………………………………………………………. 683

Глава 47. Интегрированная среда разработки Qt Creator
(см. эл. архив)
…………………………………………………………………………………… 1

Первый запуск…………………………………………………………………………………………………………………… 3

Создаем проект «Hello Qt Creator»………………………………………………………………………………….. 3

Пользовательский интерфейс Qt Creator………………………………………………………………………… 8

Окна вывода………………………………………………………………………………………………………………. 8

Окно проектного обозревателя………………………………………………………………………………… 9

Секция компилирования и запуска………………………………………………………………………….. 9

Редактирование текста…………………………………………………………………………………………………… 11

Как подсвечен ваш синтаксис?……………………………………………………………………………… 11

Скрытие и отображение кода………………………………………………………………………………… 12

Автоматическое дополнение кода………………………………………………………………………… 12

Поиск и замена………………………………………………………………………………………………………… 13

Комбинации клавиш для ускорения работы………………………………………………………… 18

Вертикальное выделение текста………………………………………………………………….. 18

Автоматическое форматирование текста……………………………………………………. 18

Комментирование блоков……………………………………………………………………………… 19

Просмотр кода методов класса, их определений и атрибутов………………….. 19

Помощь, которая всегда рядом…………………………………………………………………….. 20

Интерактивный отладчик и программный экзорцизм…………………………………………………. 21

Синтаксические ошибки…………………………………………………………………………………………. 22

Ошибки компоновки……………………………………………………………………………………………….. 23

Ошибки времени исполнения…………………………………………………………………………………. 23

Логические ошибки…………………………………………………………………………………………………. 24

Трассировка…………………………………………………………………………………………………………….. 24

Команда Step Over…………………………………………………………………………………………. 25

Команда Step Into………………………………………………………………………………………….. 25

Команда Step Out…………………………………………………………………………………………… 26

Контрольные точки………………………………………………………………………………………………… 26

Окно переменных (Local and Watches)………………………………………………………………….. 27

Окно цепочки вызовов (Call Stack)………………………………………………………………………… 28

Резюме……………………………………………………………………………………………………………………………… 28

Глава 48. Рекомендации по миграции программ из Qt 5 в Qt 6…………….. 686

Основные отличия Qt 6 от Qt 5……………………………………………………………………………………………….. 686

Подробности перевода на Qt 6……………………………………………………………………………………………….. 686

Виджеты: замена устаревших классов………………………………………………………………………….. 687

Контейнерные классы……………………………………………………………………………………………………… 687

Класс QVector………………………………………………………………………………………………………….. 687

Класс QLinkedList……………………………………………………………………………………………………. 688

Функция qVariantValue()………………………………………………………………………………………… 688

Система сигналов и слотов……………………………………………………………………………………………… 688

Графика и рендеринг……………………………………………………………………………………………………….. 688

Платформозависимый код………………………………………………………………………………………………. 689

Мультимедиа……………………………………………………………………………………………………………………. 689

QML и Qt Quick………………………………………………………………………………………………………………………… 689

Управление памятью и современный C++…………………………………………………………………………….. 690

Модуль совместимости Qt5Compat……………………………………………………………………………………….. 690

Пошаговый план миграции…………………………………………………………………………………………………….. 690

Резюме………………………………………………………………………………………………………………………………………. 691

Часть VII. Язык сценариев JavaScript…………………………………… 693

Глава 49. Основы поддержки сценариев JavaScript (см. эл. архив)….. 1

Принцип взаимодействия с языком сценариев……………………………………………………………….. 2

Первый шаг использования сценария…………………………………………………………………………….. 5

Привет, сценарий………………………………………………………………………………………………………………. 6

Резюме……………………………………………………………………………………………………………………………….. 7

Глава 50. Синтаксис языка сценариев (см. эл. архив)………………………. 1

Зарезервированные ключевые слова……………………………………………………………………………… 1

Комментарии…………………………………………………………………………………………………………………….. 2

Переменные……………………………………………………………………………………………………………………….. 2

Предопределенные типы данных……………………………………………………………………………. 3

Числовой тип……………………………………………………………………………………………………. 3

Строковый тип…………………………………………………………………………………………………. 4

Логический тип………………………………………………………………………………………………… 5

Null и Undefined……………………………………………………………………………………………….. 5

Тип Symbol………………………………………………………………………………………………………… 5

Преобразование типов……………………………………………………………………………………………… 5

Операции…………………………………………………………………………………………………………………………… 6

Операторы присваивания………………………………………………………………………………………… 6

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

Поразрядные операции…………………………………………………………………………………………….. 8

Операции сравнения…………………………………………………………………………………………………. 8

Приоритет выполнения операций……………………………………………………………………………. 9

Управляющие структуры………………………………………………………………………………………………. 10

Условные операторы……………………………………………………………………………………………… 10

Оператор if … else…………………………………………………………………………………………… 10

Оператор switch……………………………………………………………………………………………… 11

Оператор условного выражения……………………………………………………………………………. 12

Циклы……………………………………………………………………………………………………………………….. 12

Операторы break и continue………………………………………………………………………….. 12

Цикл for…………………………………………………………………………………………………………… 12

Цикл while………………………………………………………………………………………………………. 13

Цикл do…while………………………………………………………………………………………………… 13

Оператор with………………………………………………………………………………………………………….. 13

Исключительные ситуации……………………………………………………………………………………. 14

Оператор try…catch……………………………………………………………………………………….. 14

Оператор throw………………………………………………………………………………………………. 15

Функции…………………………………………………………………………………………………………………………… 15

Встроенные функции………………………………………………………………………………………………. 17

Объектная ориентация…………………………………………………………………………………………………… 17

Статические классы……………………………………………………………………………………………….. 19

Наследование………………………………………………………………………………………………………….. 20

Перегрузка методов………………………………………………………………………………………………… 23

Сказание о «джейсоне»…………………………………………………………………………………………… 23

Резюме……………………………………………………………………………………………………………………………… 24

Глава 51. Встроенные объекты JavaScript (см. эл. архив)…………………. 1

Объект Global……………………………………………………………………………………………………………………. 1

Объект Number………………………………………………………………………………………………………………….. 1

Объект Boolean…………………………………………………………………………………………………………………. 2

Объект String…………………………………………………………………………………………………………………….. 2

Замена………………………………………………………………………………………………………………………… 2

Получение символов…………………………………………………………………………………………………. 2

Получение подстроки……………………………………………………………………………………………….. 2

Объект RegExp…………………………………………………………………………………………………………………… 3

Проверка строки……………………………………………………………………………………………………….. 3

Поиск позиции совпадений………………………………………………………………………………………. 3

Найденное совпадение…………………………………………………………………………………………….. 4

Получение всех совпадений…………………………………………………………………………………….. 4

Замена с использованием функции…………………………………………………………………………. 4

Разделение строки…………………………………………………………………………………………………….. 4

Объект Array……………………………………………………………………………………………………………………… 4

Дополнение массива элементами……………………………………………………………………………. 5

Адресация элементов……………………………………………………………………………………………….. 5

Изменение порядка элементов массива………………………………………………………………….. 5

Преобразование массива в строку………………………………………………………………………….. 6

Объединение массивов……………………………………………………………………………………………… 6

Упорядочивание элементов……………………………………………………………………………………… 6

Многомерные массивы…………………………………………………………………………………………….. 6

Объект Date……………………………………………………………………………………………………………………….. 7

Объект Маth………………………………………………………………………………………………………………………. 8

Модуль числа……………………………………………………………………………………………………………. 9

Округление………………………………………………………………………………………………………………… 9

Определение максимума и минимума…………………………………………………………………….. 9

Возведение в степень………………………………………………………………………………………………… 9

Вычисление квадратного корня…………………………………………………………………………….. 10

Генератор случайных чисел………………………………………………………………………………….. 10

Тригонометрические методы…………………………………………………………………………………. 10

Вычисление натурального логарифма…………………………………………………………………. 11

Объект Function………………………………………………………………………………………………………………. 11

Резюме……………………………………………………………………………………………………………………………… 11

Глава 52. Классы поддержки JavaScript и практические примеры
(см. эл. архив)
…………………………………………………………………………………… 1

Класс QJSValue…………………………………………………………………………………………………………………. 1

Класс QJSEngine………………………………………………………………………………………………………………. 1

Практические примеры…………………………………………………………………………………………………….. 2

«Черепашья» графика……………………………………………………………………………………………….. 2

Сигналы, слоты и функции………………………………………………………………………………………. 8

Полезные дополнительные функции…………………………………………………………………….. 12

Резюме……………………………………………………………………………………………………………………………… 15

Часть VIII. Технология Qt Quick……………………………………………… 695

Глава 53. Знакомство с Qt Quick…………………………………………………………… 696

А зачем?……………………………………………………………………………………………………………………………………. 696

Введение в QML……………………………………………………………………………………………………………………….. 698

Быстрый старт…………………………………………………………………………………………………………………………. 700

Использование JavaScript в QML……………………………………………………………………………………………. 704

Резюме………………………………………………………………………………………………………………………………………. 706

Глава 54. Элементы……………………………………………………………………………… 707

Визуальные элементы……………………………………………………………………………………………………………… 707

Свойства элементов…………………………………………………………………………………………………………………. 709

Собственные свойства…………………………………………………………………………………………………….. 712

Создание собственных элементов………………………………………………………………………………………….. 714

Создание собственных модулей…………………………………………………………………………………………….. 716

Динамическое создание элементов………………………………………………………………………………………… 717

Элемент Flickable…………………………………………………………………………………………………………………….. 717

Готовые элементы пользовательского интерфейса……………………………………………………………… 718

Диалоговые окна……………………………………………………………………………………………………………………… 722

Резюме………………………………………………………………………………………………………………………………………. 724

Глава 55. Управление размещением элементов (см. эл. архив)…………. 1

Фиксаторы…………………………………………………………………………………………………………………………. 1

Традиционные размещения……………………………………………………………………………………………… 7

Размещение в виде потока……………………………………………………………………………………………… 11

Резюме……………………………………………………………………………………………………………………………… 12

Глава 56. Элементы графики (см. эл. архив)…………………………………….. 1

Цвета………………………………………………………………………………………………………………………………….. 1

Растровые изображения…………………………………………………………………………………………………… 2

Элемент Image…………………………………………………………………………………………………………… 2

Элемент BorderImage………………………………………………………………………………………………… 6

Градиенты…………………………………………………………………………………………………………………………. 7

Шрифты……………………………………………………………………………………………………………………………… 9

Рисование на элементах холста……………………………………………………………………………………. 10

Шейдеры и эффекты……………………………………………………………………………………………………….. 14

Резюме……………………………………………………………………………………………………………………………… 17

Глава 57. Пользовательский ввод (см. эл. архив)……………………………… 1

Область мыши…………………………………………………………………………………………………………………… 1

Сигналы…………………………………………………………………………………………………………………………….. 4

Ввод с клавиатуры……………………………………………………………………………………………………………. 8

Фокус………………………………………………………………………………………………………………………….. 8

«Сырой» ввод…………………………………………………………………………………………………………… 10

Мультитач………………………………………………………………………………………………………………………. 12

Резюме……………………………………………………………………………………………………………………………… 14

Глава 58. Анимация……………………………………………………………………………… 729

Анимация при изменении свойств………………………………………………………………………………………….. 729

Анимация для изменения числовых значений……………………………………………………………….. 731

Анимация с изменением цвета………………………………………………………………………………………… 732

Анимация с поворотом…………………………………………………………………………………………………….. 733

Анимации поведения……………………………………………………………………………………………………………….. 734

Параллельные и последовательные анимации…………………………………………………………………….. 735

Состояния и переходы…………………………………………………………………………………………………………….. 739

Состояния…………………………………………………………………………………………………………………………. 739

Переходы………………………………………………………………………………………………………………………….. 741

Модуль частиц…………………………………………………………………………………………………………………………. 743

Резюме………………………………………………………………………………………………………………………………………. 747

Глава 59. Модель/Представление…………………………………………………………. 748

Модели……………………………………………………………………………………………………………………………………… 748

Модель списка………………………………………………………………………………………………………………….. 748

JSON-модель……………………………………………………………………………………………………………………… 749

Представление данных моделей…………………………………………………………………………………………….. 750

Элемент ListView………………………………………………………………………………………………………………. 750

Элемент GridView…………………………………………………………………………………………………………….. 753

Элемент PathView…………………………………………………………………………………………………………….. 755

Визуальная модель данных……………………………………………………………………………………………………. 757

Резюме………………………………………………………………………………………………………………………………………. 759

Глава 60. Qt Quick и C++……………………………………………………………………… 760

Использование языка QML в C++…………………………………………………………………………………………… 760

Взаимодействие из C++ со свойствами QML-элементов и вызов их функций……………. 761

Соединение QML-сигналов со слотами C++…………………………………………………………………. 763

Использование компонентов языка C++ в QML……………………………………………………………………. 766

Экспорт объектов и виджетов из C++ в QML…………………………………………………………………. 767

Использование зарегистрированных объектов C++, их свойств и методов в QML……. 769

Реализация визуальных элементов QML на C++………………………………………………………….. 773

Класс QQuickImageProvider……………………………………………………………………………………………. 776

Резюме………………………………………………………………………………………………………………………………………. 780

Глава 61. 3D-графика: Qt 3D………………………………………………………………… 782

Основы………………………………………………………………………………………………………………………………………. 782

Cвет…………………………………………………………………………………………………………………………………………… 783

Камера………………………………………………………………………………………………………………………………………. 784

3D-объекты……………………………………………………………………………………………………………………………….. 785

Материалы……………………………………………………………………………………………………………………………….. 787

Трансформация………………………………………………………………………………………………………………………… 791

Анимация………………………………………………………………………………………………………………………………….. 792

Резюме………………………………………………………………………………………………………………………………………. 794

Часть IX. Мобильные приложения и Qt………………………………… 797

Глава 62. Введение в мир мобильных приложений………………………………. 798

Смартфоны изменили всё………………………………………………………………………………………………………… 799

Виртуальные магазины приложений…………………………………………………………………………………….. 800

Распространение приложений вне виртуального магазина………………………………………………… 803

Qt 6 и разработка мобильных приложений…………………………………………………………………………… 803

Резюме………………………………………………………………………………………………………………………………………. 804

Глава 63. Подготовка к работе над мобильными приложениями…………. 806

Подготовка среды для разработки iOS-приложений……………………………………………………………. 806

Резюме………………………………………………………………………………………………………………………………………. 809

Глава 64. Особенности разработки приложений
для мобильных устройств…………………………………………………………………….. 810

Анатомия свойств для iOS-приложений…………………………………………………………………………………. 811

Свойства iOS-приложений………………………………………………………………………………………………. 811

Автоматический поворот………………………………………………………………………………………………………… 813

Обработка поворота в приложениях……………………………………………………………………………………… 815

Сенсоры……………………………………………………………………………………………………………………………………. 816

Пользовательский ввод при помощи пальцев……………………………………………………………………….. 819

Положение рук…………………………………………………………………………………………………………………………. 821

Резюме………………………………………………………………………………………………………………………………………. 822

Глава 65. Пример разработки мобильного приложения (см. эл. архив) 1

Обдумывание и планирование приложения…………………………………………………………………… 1

Название приложения………………………………………………………………………………………………. 2

Значок приложения…………………………………………………………………………………………………… 2

Что будет в первой версии?……………………………………………………………………………………… 3

Пишем код…………………………………………………………………………………………………………………………. 5

Добавление к приложению значков и стартовых экранов…………………………………………. 12

Резюме……………………………………………………………………………………………………………………………… 13

Глава 66. Публикация в магазине мобильных приложений
(см. эл. архив)
…………………………………………………………………………………… 1

Этапы работы…………………………………………………………………………………………………………………… 1

Регистрация……………………………………………………………………………………………………………….. 2

Настройки для запуска приложений на реальных устройствах………………………….. 3

Создание электронной подписи………………………………………………………………………………. 8

Создание страницы приложения…………………………………………………………………………….. 9

Загрузка и публикация приложения……………………………………………………………………… 15

Резюме……………………………………………………………………………………………………………………………… 17

Часть X. Qt и ИИ………………………………………………………………………………. 825

Глава 67. Разработчик Qt в эпоху искусственного интеллекта…………….. 826

От искры до пепла — знакомый путь разработчика……………………………………………………………. 826

История революций: огонь, пар, электричество и… интеллект……………………………………………. 826

Взгляд на нейросети по-человечески…………………………………………………………………………………….. 827

Страх, который стоит рядом с возможностью………………………………………………………………………. 827

Новая типология разработчиков……………………………………………………………………………………………. 827

Новый язык: диалог с машиной……………………………………………………………………………………………… 828

Неудобная правда: что действительно происходит…………………………………………………………….. 828

К чему готовиться: навыки будущего……………………………………………………………………………………. 830

Навык № 1: Архитектурное мышление………………………………………………………………………….. 830

Навык № 2: Промпт-инжиниринг — язык взаимодействия с ИИ………………………………….. 830

Навык № 3: Гибридное мышление — сила симбиоза человека и ИИ…………………………. 831

Навык № 4: Управление ИИ-агентами — оркестровка цифровой команды……………….. 831

Навык № 5: Фундаментальные знания…………………………………………………………………………… 832

Qt 6 — ваше секретное оружие в эпоху ИИ…………………………………………………………………………… 832

Почему Qt идеально подходит для ИИ-разработки?……………………………………………………. 832

Финальные мысли……………………………………………………………………………………………………………………. 833

Мир, где джуниоры исчезают…………………………………………………………………………………………. 833

Рынок ищет «сшивателей миров»……………………………………………………………………………………. 833

Что не сможет автоматизировать ни одна нейросеть?…………………………………………………. 834

Три простые истины………………………………………………………………………………………………………… 834

Мы уже проходили это……………………………………………………………………………………………………. 834

Трансформация, а не исчезновение………………………………………………………………………………… 835

Где наша настоящая ценность?……………………………………………………………………………………… 835

Резюме………………………………………………………………………………………………………………………………………. 835

Глава 68. Чат-боты в Qt-разработке……………………………………………………… 837

Почему чат-боты стали незаменимыми…………………………………………………………………………………. 837

Типы современных моделей……………………………………………………………………………………………………. 838

Reasoning-модели…………………………………………………………………………………………………………….. 838

Vision-модели и мультимодальные модели……………………………………………………………………. 838

Мультиязычные модели………………………………………………………………………………………………….. 839

Облачные чат-боты…………………………………………………………………………………………………………………. 839

ChatGPT…………………………………………………………………………………………………………………………….. 839

Генерация визуального контента и кода полноценного приложения……………….. 841

Собственные GPTs и Projects………………………………………………………………………………….. 843

Клиентские приложения ChatGPT…………………………………………………………………………. 845

Слабые стороны ChatGPT……………………………………………………………………………………… 845

Claude………………………………………………………………………………………………………………………………… 845

Экономия токенов: батчинг запросов…………………………………………………………………… 847

Генерация кода с использованием визуального контента………………………………….. 848

Клиентские приложения Claude…………………………………………………………………………….. 848

Ограничения Claude……………………………………………………………………………………………….. 849

Дополнительные облачные чат-боты……………………………………………………………………………. 849

Локальные чат-боты……………………………………………………………………………………………………………….. 851

Зачем Qt-разработчику локальные модели?…………………………………………………………………. 851

Почему это особенно важно для Qt-разработчика?……………………………………………. 851

LM Studio………………………………………………………………………………………………………………………….. 851

Ollama……………………………………………………………………………………………………………………………….. 853

Сильные стороны Ollama……………………………………………………………………………………….. 854

Недостатки Ollama…………………………………………………………………………………………………. 855

Jan……………………………………………………………………………………………………………………………………… 855

GPT4All……………………………………………………………………………………………………………………………… 856

«Железо» для локальных LLM……………………………………………………………………………………….. 857

О размере моделей………………………………………………………………………………………………….. 858

Принцип выбора……………………………………………………………………………………………………… 858

Cравнение человеческого мозга и LLM………………………………………………………………… 858

Гибридный подход………………………………………………………………………………………………………………….. 858

Резюме………………………………………………………………………………………………………………………………………. 859

Глава 69. ИИ-IDE и консольные инструменты в Qt-разработке…………… 861

Gemini CLI: ИИ-ассистент в терминале…………………………………………………………………………………. 861

Установка и начало работы……………………………………………………………………………………………. 862

Работа с кодом…………………………………………………………………………………………………………………. 863

Экосистема CLI-инструментов………………………………………………………………………………………………. 864

Cursor: ИИ-IDE следующего поколения…………………………………………………………………………………. 865

Загрузка и установка……………………………………………………………………………………………………….. 865

Архитектура и режимы работы………………………………………………………………………………………. 867

Три режима работы: выбери нужный подход……………………………………………………………….. 867

Режим Agent (агента): автопилот для сложных задач…………………………………………. 867

Режим вопросов (Ask): консультант и аналитик………………………………………………….. 868

Режим Plan (план): создание подробных планов…………………………………………………. 868

Правила проекта: обучаем ИИ вашему стилю и подходу……………………………………………. 868

«Горячие клавиши»: ваш боевой арсенал……………………………………………………………………… 870

Автодополнение на стероидах………………………………………………………………………………. 870

Встроенное редактирование………………………………………………………………………………….. 871

Чат с кодовой базой………………………………………………………………………………………………… 871

Лучшие практики работы с ИИ в Qt-проектах………………………………………………………………. 872

Работа с контекстом……………………………………………………………………………………………….. 872

Использование MCP-серверов……………………………………………………………………………….. 873

Структурирование промптов…………………………………………………………………………………. 873

Итеративная разработка………………………………………………………………………………………… 874

Проверяйте Qt-специфику………………………………………………………………………………………. 874

Рефакторинг и оптимизация…………………………………………………………………………………… 874

Используйте скриншоты для UI…………………………………………………………………………….. 875

Сравнение Gemini CLI и Cursor на примере рефакторинга плеера…………………………………….. 875

Экосистема IDE-инструментов для разработки с ИИ…………………………………………………………… 876

Резюме………………………………………………………………………………………………………………………………………. 877

Глава 70. Промпт-инжиниринг как новый навык……………………………….. 879

Что изменилось и почему это важно для Qt-разработчика?………………………………………………… 879

Анатомия современного промпта…………………………………………………………………………………………… 880

Современные типы промптов…………………………………………………………………………………………………. 881

Тип A…………………………………………………………………………………………………………………………………. 881

Тип B…………………………………………………………………………………………………………………………………. 882

Тип C…………………………………………………………………………………………………………………………………. 882

Лучшие практики эффективного взаимодействия с ИИ………………………………………………… 883

Техника 1. Декомпозиция: разделяй и властвуй………………………………………………….. 884

Техника 2. «Покажи — повтори — расширь»………………………………………………………. 884

Техника 3. Явное управление версиями и устаревшими API……………………………… 885

Техника 4. Ограничительная…………………………………………………………………………………. 885

Практическая библиотека промптов……………………………………………………………………………………… 885

Работа с различными ИИ-платформами………………………………………………………………………… 885

Особенности применения CursorIDE…………………………………………………………………….. 886

Особенности применения Gemini CLI…………………………………………………………………… 886

Особенности применения LM Studio, Ollama, Jan и GPT4All………………………………. 886

И наконец………………………………………………………………………………………………………………………….. 886

Промпты для рефакторинга…………………………………………………………………………………………….. 886

Документация: создание и обновление………………………………………………………………………….. 888

Промпты для отладки: поиск и исправление багов………………………………………………………. 890

Промпты для ревью кода: поиск потенциальных проблем………………………………………….. 893

Промпт для тестирования: автоматизация проверок……………………………………………………. 895

Промпты для портирования……………………………………………………………………………………………. 896

Заключение: ответственность разработчика в эпоху ИИ-ассистентов………………………………. 898

Юридические риски и происхождение кода………………………………………………………………….. 898

Предвзятость и дискриминация………………………………………………………………………………………. 898

Утечка интеллектуальной собственности……………………………………………………………………… 898

Деградация инженерного мышления……………………………………………………………………………… 899

Правила безопасного применения………………………………………………………………………………….. 899

Баланс между скоростью и контролем………………………………………………………………………….. 899

Резюме………………………………………………………………………………………………………………………………………. 899

Эпилог………………………………………………………………………………………………….. 901

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

Приложение 1. Настройка среды для работы над Qt-приложениями……. 904

Настройка среды для macOS………………………………………………………………………………………………….. 904

Настройка среды для Windows………………………………………………………………………………………………. 906

Настройка среды для Ubuntu Linux……………………………………………………………………………………….. 907

Приложение 2. Таблица простых чисел………………………………………………… 909

Приложение 3. Таблицы семибитной кодировки ASCII……………………….. 912

Приложение 4. Описание сопровождающего книгу файлового архива… 915

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

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

Чёрная птица. Чукотские сказки

Чёрная птица. Чукотские сказки

В книгу вошли сказки чукчей — коренных жителей Чукотского полуострова. Как и для многих народов, сказки для чукчей это не просто развлечение, а способ объяснить мир, научить детей правилам жизни, сохранить знания и обычаи. Суровые условия жизни оказали влияние на сюжеты чукотских сказок: в них главным героям приходится доказывать свое мастерство охотника или рыболова, бороться с природными силами, злыми чудовищами и дикими зверями.
Сказки, вошедшие в сборник, созданы в годы Великой Отечественной войны писателем и корреспондентом Александром Лозневым. В основу этих сказок легли сказания местных народов, которые писатель собирал и переводил на русский язык в период его работы на Чукотке.

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

Чукотский олень

Какие сказки рассказывают на далёкой Чукотке, и вообще, до сказок ли на полуострове, где лето заканчивается, едва начавшись, а зима — самая морозная на планете?

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

Художник

Любовь-Лазарева

 

Любовь Лазарева — выпускница Новосибирской художественной школы №1 и архитектурного факультета НИСИ.Почти 30 лет занимается иллюстрацией и дизайном детской книги, на данный момент оформила свыше 100 изданий. Сотрудничала с известными издательствами Новосибирска, Красноярска, Челябинска, Москвы и др. В 2003 и 2004 годах дважды занимала I место в конкурсе новогодней открытки в Токио (Япония) в разных номинациях.

 

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

Новинка: “Алгоритмы на языке Go”

Алгоритмы на языке Go

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

Для Go-разработчиков

.

Современный бэкенд от API баз данных до вставок на TypeScript

Современный бэкенд от API баз данных до вставок на TypeScript, от небольших утилит до криптографических модулей и процедур для ускорения ядра Linux невозможно представить себе без кода на языке Go.

В этой книге рассмотрены алгоритмы и их реализации на языке Go, относящиеся к следующим предметным областям:

  • Понятие о структурах данных
  • Поиск, сортировка и сжатие данных
  • Алгоритмы достижения консенсуса
  • Алгоритмы для распределенных систем
  • Криптографические алгоритмы
  • Создание и защита цифровых подписей

Артём Михайлов — опытный программист, специалист по высоконагруженным системам, в настоящее время работает в стартапе, занятым высоконагруженными приложениями, ранее работал в научном кластере «Иннополис», компаниях «МТС» и «Тензор». Постоянно делится своим опытом на Хабре, пишет статьи для корпоративных блогов «Росатом», «ВТБ», «VK», «IBS», «OTUS».

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

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

– Глава 1 –
Алгоритмы, сложности и структуры данных. 9

Структуры данных: массивы, списки, хеш-таблицы, деревья. 11

Массивы.. 11

Связные списки. 13

Хеш-таблицы.. 14

Деревья. 15

Структуры данных в Go. 18

Массивы и срезы в Go. 18

Связные списки в Go. 20

Хеш-таблицы (отображения) в Go. 22

Деревья в Go. 24

– Глава 2 –
Поиск, сортировка и сжатие данных. 28

Алгоритмы поиска. 28

Двоичный поиск. 28

Интерполяционный поиск. 30

Поиск Фибоначчи. 31

Алгоритмы сортировки. 33

Быстрая сортировка. 34

Сортировка слиянием.. 36

Пирамидальная сортировка. 37

Поразрядная сортировка. 39

Алгоритмы сжатия данных. 42

Алгоритм Хаффмана. 42

Алгоритм LZW… 45

Алгоритм Brotli 48

Алгоритм Snappy. 50

Алгоритмы поиска подстроки. 52

Алгоритм Кнута–Морриса–Пратта. 52

Алгоритм Бойера–Мура. 54

Алгоритм Рабина–Карпа. 57

Алгоритмы кратчайших путей. 59

Алгоритм Дейкстры.. 60

Алгоритм Беллмана–Форда. 65

Алгоритм A*: эвристический поиск. 68

Примеры использования алгоритмов кратчайшего пути. 72

Сравнение алгоритмов кратчайших путей. 73

Потоки в сетях. 73

Сети и потоки. 73

Задача о максимальном потоке: найти поток наибольшей величины.. 74

Алгоритм Форда-Фалкерсона. 74

Алгоритм Диница. 76

Применения. 79

Теорема о максимальном потоке и минимальном разрезе. 79

– Глава 3 –
Распределенные алгоритмы.. 81

Что делает распределенные системы сложными?. 82

CAP-теорема: фундаментальный компромисс. 83

Три свойства. 84

Теорема. 84

Почему нельзя всё сразу?. 84

А что с CA?. 85

Примеры систем.. 85

Критика и уточнения. 86

Модели согласованности. 86

Строгая согласованность (Strong Consistency / Linearizability) 86

Последовательная согласованность (Sequential Consistency) 87

Причинная согласованность (Causal Consistency) 87

Read Your Writes (прочитайте ваши записи) 87

Eventual Consistency (согласованность в конечном счете) 88

Eventual Consistency. 88

Разрешение конфликтов. 90

Кворумы: настраиваемая согласованность. 93

Окно несогласованности. 94

Практические паттерны.. 94

Saga — для распределенных транзакций. 94

Outbox — для надежной публикации событий. 96

Idempotency key — для идемпотентных операций. 97

Circuit breaker — для устойчивости. 98

– Глава 4 –
Алгоритмы консенсуса. 101

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

Формальное определение. 102

Практические применения. 102

Невозможность: почему это так сложно?. 103

Проблема двух генералов. 103

Почему это невозможно?. 103

FLP-невозможность. 104

Интуиция доказательства. 105

Как жить с невозможностью?. 105

Paxos: алгоритм, изменивший всё. 106

Одна инстанция Paxos. 106

Номера предложений (proposal numbers) 107

Протокол: две фазы.. 107

Почему это работает?. 110

Пример выполнения. 110

Сценарий 1: простой случай. 110

Сценарий 2: конкурирующие proposers. 111

Проблема прогресса: дуэль proposers. 113

Multi-Paxos: от одного значения к журналу. 114

Практические соображения. 115

Недостатки Paxos. 116

Raft: консенсус для смертных. 116

Философия Raft 116

Роли и термы.. 117

Выбор лидера. 118

Репликация журнала. 120

AppendEntries RPC.. 120

Алгоритм follower’а. 121

Алгоритм лидера. 122

Log Matching Property: свойство сопоставления с журналом.. 124

Leader Completeness Property: свойство безопасности. 124

Почему лидер не коммитит записи прошлых термов напрямую?. 125

Кластерное членство: Joint Consensus. 125

Снэпшоты и компактификация журнала. 126

Клиентское взаимодействие. 127

Полный пример: минимальный Raft на Go. 127

Системы на Raft 133

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

– Глава 5 –
Распределенные транзакции. 134

ACID в распределенном мире. 134

Проблема атомарного коммита. 134

Two-Phase Commit (2PC) 135

Фаза 1: Prepare (голосование) 135

Фаза 2: Commit/Abort (фиксация) 135

Проблемы 2PC.. 136

Пример: перевод денег. 137

Three-Phase Commit (3PC) 137

Saga. 138

Оркестрация. 139

Хореография. 140

TCC: Try-Confirm-Cancel 140

Outbox Pattern: надежная публикация событий. 141

Таблица outbox. 142

Идемпотентность. 142

Сравним подходы.. 143

Когда что использовать?. 143

– Глава 6 –
Криптографические алгоритмы.. 144

От Цезаря до Тьюринга: краткая история шифров. 144

Фундаментальные понятия. 146

Симметричное шифрование. 147

Одноразовый блокнот: идеал, недостижимый на практике. 148

Потоковые и блочные шифры.. 149

Реализация AES на Go. 151

Асимметричное шифрование. 153

Хеш-функции: MD5, SHA-256, Blake2, Argon2. 157

Исторический путь: от CRC до Argon2. 158

Односторонность, коллизии и эффект лавины.. 160

Зачем нужны разные хеш-функции?. 161

MD5 — эпоха надежд и коллизий. 163

SHA-256 — надежный наследник. 164

Blake2 — быстрее, сильнее, современнее. 167

Argon2 — хеширование паролей на стероидах. 169

Выбор хеш-функции. 171

– Глава 7 –
Реализация цифровых подписей и протоколов безопасности. 174

Математическая сущность цифровых подписей. 174

Схемы подписей на эллиптических кривых. 175

Реализация Ed25519 в Go. 177

– Глава 8 –
Атаки на цифровые подписи. 178

Replay-атаки и временны́е метки. 178

Подмена контекста (context substitution) 178

Слепые подписи и их применение. 179

Пороговые подписи. 179

BLS-подписи и агрегация. 180

JWT и stateless-аутентификация. 181

Идея: зашифровать сессию в токене. 181

Анатомия JWT: три части. 182

Жизненный цикл JWT.. 182

Симметричная и асимметричная подпись. 184

Распространение публичного ключа: JWKS. 185

Теперь про уязвимости. 186

Атака Algorithm substitution. 186

Уязвимость None algorithm… 187

Слабые секреты HMAC.. 187

Атаки JKU и X5U.. 188

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

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

Встречайте: Разработка программного обеспечения. Практическое руководство для новичков в IT-команде

Разработка программного обеспечения. Практическое руководство для новичков в IT-команде

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

Для начинающих IT-специалистов

Системное понимание процессов разработки в российских реалиях

Работа в IT-команде требует не только профессиональных знаний, но и понимания процессов, ролей и принципов взаимодействия внутри проекта. Эта книга помогает пройти путь от первого дня в проекте до уверенного профессионального роста.

Незнакомые процессы, непонятные термины, страх задать «глупый» вопрос — всё это знакомо каждому новичку в IT. В книге нет абстрактных теорий и сложных технических терминов. Только практические навыки работы в команде.

Что внутри:

  • Как устроены российские IT-компании и доступные карьерные пути
  • Практическое руководство по процессам разработки
  • Эффективная коммуникация в команде и участие в рабочих встречах
  • Пошаговый план развития: от адаптации до оценки результатов и повышения
  • Современные инструменты и методы работы с учётом российской специфики

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

Для начинающих специалистов всех направлений — аналитиков, тестировщиков, продуктовых менеджеров, продуктовых дизайнеров  (UX/UI) и разработчиков, которые хотят быстро влиться в команду и понять, как устроена разработка ПО.


Книгу “Разработка программного обеспечения. Практическое руководство для новичков в IT-команде
” можно купить в нашем интенет-магазине.