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

Новинка: “Принципы модернизации программных архитектур”

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

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

Об авторах……………………………………………………………………………………………… 15

О рецензенте………………………………………………………………………………………….. 17

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

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

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

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

Глава 1. Что не так с монолитами?………………………………………………………… 23

Структура главы………………………………………………………………………………………………………………………… 24

Что такое монолиты?…………………………………………………………………………………………………………………. 25

Большая кодовая база……………………………………………………………………………………………………….. 26

Несколько модулей развертывания………………………………………………………………………………….. 26

Другие особенности монолита…………………………………………………………………………………………. 27

Централизация………………………………………………………………………………………………………….. 27

Неновый…………………………………………………………………………………………………………………….. 28

Имеет ли значение размер?……………………………………………………………………………………………….. 29

Неувязки с монолитами…………………………………………………………………………………………………………….. 31

Шаблоны в разработке программного обеспечения………………………………………………………………. 33

Что такое антипаттерн?…………………………………………………………………………………………………….. 34

Жизнь с монолитами: антипаттерны, побочные эффекты и усилители……………………………….. 34

Антипаттерны монолитов…………………………………………………………………………………………………. 34

Высокая степень связности………………………………………………………………………………………. 35

Неправильные абстракции………………………………………………………………………………………. 36

Отсутствие изоляции………………………………………………………………………………………………… 37

Побочные эффекты монолитов…………………………………………………………………………………………. 38

Сложность развертывания……………………………………………………………………………………….. 38

Недостаточный уровень тестирования…………………………………………………………………… 40

Отсутствие владельца………………………………………………………………………………………………. 40

Медленное внедрение новых технологий………………………………………………………………. 41

Медленный цикл разработки…………………………………………………………………………………… 44

Автоматизация и антипаттерны……………………………………………………………………………………….. 45

Усилители…………………………………………………………………………………………………………………………… 46

Разбитые окна / копирование и вставка………………………………………………………………….. 46

Зависть к микросервисам…………………………………………………………………………………………. 49

Нехватка квалифицированных специалистов……………………………………………………….. 49

Страх перемен…………………………………………………………………………………………………………… 51

Все ли монолиты плохие?…………………………………………………………………………………………………………. 51

Монолиты — это форма архитектуры программного обеспечения……………………………… 52

Преимущества монолитов…………………………………………………………………………………………………………. 53

Влияние рефакторинга и изменений…………………………………………………………………………………. 53

Упрощение некоторых миграций……………………………………………………………………………………… 54

Хорошая отправная точка………………………………………………………………………………………………… 54

Упрощенная инфраструктура…………………………………………………………………………………………… 54

Типы монолитов…………………………………………………………………………………………………………………………. 54

Классические, распределенные и модульные монолиты……………………………………………….. 54

Модульные монолиты: хороший вид монолита……………………………………………………………… 56

Модульные монолиты: Istio………………………………………………………………………………………………. 58

Модульные монолиты: мобильные суперприложения…………………………………………………… 60

Можно ли избежать плохих монолитов?…………………………………………………………………………………. 61

Что нужно запомнить………………………………………………………………………………………………………………… 64

Глава 2. Антипаттерны: отсутствие изоляции………………………………………… 67

Структура главы………………………………………………………………………………………………………………………… 67

Что такое изоляция?…………………………………………………………………………………………………………………… 69

Изоляция в программном обеспечении……………………………………………………………………………………. 70

Соблазны изоляции……………………………………………………………………………………………………………………. 71

Внешнее воздействие…………………………………………………………………………………………………………. 71

Существующий компонент, BFF……………………………………………………………………………… 74

Существующий компонент, изменение существующей конечной точки…………….. 74

Существующий сервис, добавление новой конечной точки…………………………………. 75

Новый сервис, общий доступ к базе данных………………………………………………………….. 75

Что такое бэкенд для фронтенда (BFF)?…………………………………………………………………. 77

Новый сервис, общий доступ к данным………………………………………………………………….. 77

Что такое обработка событий?……………………………………………………………………………….. 77

Обработка событий в программном обеспечении…………………………………………………. 78

CQRS и ее связь с ES…………………………………………………………………………………………………. 80

Новый сервис, общий доступ через API………………………………………………………………….. 80

Централизация……………………………………………………………………………………………………………………. 81

Преимущества централизации инженерных команд…………………………………………….. 81

Проблемы, связанные с чрезмерной централизацией……………………………………………. 82

Проблемы с поставками и инновациями…………………………………………………………………. 82

Централизация в сравнении со стандартизацией для обеспечения наблюдаемости и развертывания          84

Плохие общие библиотеки……………………………………………………………………………………….. 85

Разрушение изоляции………………………………………………………………………………………………………………… 85

Совместное использование баз данных…………………………………………………………………………… 85

Когда можно использовать базы данных совместно?…………………………………………… 88

Базы данных приложений для совместного использования в Big Data……………….. 88

Скрытые контракты и сохранение изоляции………………………………………………………….. 90

Интеграция с устаревшими системами…………………………………………………………………… 91

Общие библиотеки……………………………………………………………………………………………………………… 91

Бинарная связь………………………………………………………………………………………………………….. 92

Отсутствие стабильных контрактов…………………………………………………………………………………. 94

Повышение сложности…………………………………………………………………………………………………….. 100

Детализация и распространение: побочные эффекты………………………………………… 101

Давайте изолируем всё……………………………………………………………………………………………………………. 104

Базы данных…………………………………………………………………………………………………………………….. 104

Общие библиотеки…………………………………………………………………………………………………………… 104

Стабильные контракты……………………………………………………………………………………………………. 104

Насыщенные модули и философия проектирования программного обеспечения…….. 105

Операционные системы и инфраструктура…………………………………………………………………… 106

Расширенная изоляция…………………………………………………………………………………………………….. 107

Сооружение переборок и изоляция сбоев…………………………………………………………….. 107

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

Изоляция пользовательского опыта: деградация и изыскания…………………………… 111

Как предотвратить проблемы с изоляцией……………………………………………………………………………. 113

Обзор конструкций и оснастки……………………………………………………………………………………….. 113

Что нужно запомнить………………………………………………………………………………………………………………. 114

Глава 3. Антипаттерны: распределенные монолиты…………………………….. 116

Структура главы……………………………………………………………………………………………………………………… 116

Что такое распределенный монолит?……………………………………………………………………………………. 118

Особенности распределенных монолитов…………………………………………………………………….. 118

Как создаются распределенные монолиты?…………………………………………………………………………. 119

Совместное использование баз данных разными сервисами………………………………………. 120

Общие библиотеки доступа к данным……………………………………………………………………………. 122

Общие контракты…………………………………………………………………………………………………………….. 123

Проблемы с распределенными монолитами…………………………………………………………………………. 124

Бинарная связь…………………………………………………………………………………………………………………. 124

Временнáя взаимосвязь……………………………………………………………………………………………………. 125

Повышение сложности…………………………………………………………………………………………… 126

Внедрение асинхронности с архитектурой, управляемой событиями………………. 127

Уязвимости и исправления в системе безопасности……………………………………………………… 130

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

Проблемы с управлением………………………………………………………………………………………………… 132

Проблемы с логикой………………………………………………………………………………………………………… 133

Усилители…………………………………………………………………………………………………………………………………. 134

Размывание команды……………………………………………………………………………………………………….. 134

Владелец программного обеспечения………………………………………………………………….. 136

Антинаучное мышление………………………………………………………………………………………………….. 137

Новые функции и исправление багов…………………………………………………………………………….. 138

Мины………………………………………………………………………………………………………………………… 141

Плохая среда……………………………………………………………………………………………………………………. 142

Типы распределенных монолитов…………………………………………………………………………………………. 143

Серверная часть……………………………………………………………………………………………………………….. 144

BFF и интерфейс……………………………………………………………………………………………………………….. 144

Бессерверная архитектура……………………………………………………………………………………………… 145

Сложность бессерверных архитектур………………………………………………………………….. 147

Обратный эффект: снова хуже!………………………………………………………………………………………………. 149

Архитекторы как контролеры не масштабируются……………………………………………………… 149

Новые возможности/функции…………………………………………………………………………………………. 150

Новая таблица………………………………………………………………………………………………………………….. 151

Устаревшая технология…………………………………………………………………………………………………… 151

Предотвращение дальнейших повреждений…………………………………………………………………………. 152

Подумайте о возвращении к монолиту………………………………………………………………………….. 152

Советы по команде и процессу……………………………………………………………………………… 152

Советы по технологиям и архитектуре программного обеспечения…………………. 153

Что нужно запомнить………………………………………………………………………………………………………………. 154

Глава 4. Антипаттерны: внутренние общие библиотеки………………………. 157

Структура главы……………………………………………………………………………………………………………………… 157

Что такое библиотека?……………………………………………………………………………………………………………. 159

Типы библиотек……………………………………………………………………………………………………………………….. 160

Библиотеки и фреймворки……………………………………………………………………………………………….. 161

Проблемы с библиотеками……………………………………………………………………………………………………… 162

Постоянные миграции……………………………………………………………………………………………………… 162

Отсутствие стабильных контрактов………………………………………………………………………………. 162

Бинарная связь / сломанная изоляция……………………………………………………………………………. 163

Стимулы для создания библиотек………………………………………………………………………………….. 164

Антипаттерн: фреймворк…………………………………………………………………………………………………. 165

В защиту библиотек………………………………………………………………………………………………………………… 167

Производительность………………………………………………………………………………………………………… 168

Путь к надежности…………………………………………………………………………………………………………… 168

Языковые идиомы…………………………………………………………………………………………………………….. 168

Централизация кода………………………………………………………………………………………………………… 169

Перестаньте заново изобретать велосипед……………………………………………………………………. 169

Подводные камни — неправильные методы, которых следует избегать…………………………… 170

Внутренние общие библиотеки………………………………………………………………………………………. 170

Эффект короткого одеяла………………………………………………………………………………………………… 170

Большие фреймворки……………………………………………………………………………………………………….. 171

Раздутые библиотеки………………………………………………………………………………………………………. 172

Очень популярные библиотеки………………………………………………………………………………………. 172

Библиотеки доставки конфигурации……………………………………………………………………………… 172

Размывание команды в общих библиотеках…………………………………………………………………. 173

Драйверы сервисов…………………………………………………………………………………………………. 174

Утилиты…………………………………………………………………………………………………………………………….. 176

Обёртки……………………………………………………………………………………………………………………………… 177

Расширение……………………………………………………………………………………………………………… 177

Новые абстракции………………………………………………………………………………………………….. 178

Отсутствие управления……………………………………………………………………………………………………. 179

Улучшенные возможности……………………………………………………………………………………………………… 180

Когда нам следует создавать библиотеку?…………………………………………………………………… 180

Когда нам не следует создавать библиотеку?………………………………………………………………. 181

Использование сервисов………………………………………………………………………………………………….. 182

Отсутствие бинарной связи……………………………………………………………………………………. 182

Значительно улучшенная гибкость………………………………………………………………………. 182

Простая миграция или отсутствие миграции……………………………………………………….. 183

Критический уровень надежности………………………………………………………………………… 183

В некоторых случаях производительность………………………………………………………….. 184

Паттерн Sidecar………………………………………………………………………………………………………………… 186

Современный Sidecar………………………………………………………………………………………………. 186

Sidecar и прокси………………………………………………………………………………………………………. 189

Sidecar и Kubernetes………………………………………………………………………………………………… 190

Как можно построить Sidecar? Типы Sidecar………………………………………………………… 193

Сетки сервисов………………………………………………………………………………………………………… 195

Простые альтернативы……………………………………………………………………………………………………. 196

Использовать существующие пакеты SDK и библиотеки…………………………………… 196

Сделать это самостоятельно…………………………………………………………………………………. 196

Скопировать и вставить код…………………………………………………………………………………… 197

Внести свой вклад в работу с открытым исходным кодом…………………………………. 197

Правильная конструкция библиотеки……………………………………………………………………………………. 197

Дублирование против повторного использования……………………………………………………….. 197

Плохое дублирование: бизнес-код………………………………………………………………………… 197

Плохое дублирование: выполнение……………………………………………………………………… 198

Хорошее дублирование: миграция……………………………………………………………………….. 198

Хорошее дублирование: конфигурация и код установки……………………………………. 198

Повторное использование: палка о двух концах…………………………………………………. 199

Грамотное управление зависимостями………………………………………………………………………….. 200

Сливки зависимостей……………………………………………………………………………………………… 201

Избегайте использования родительского POM……………………………………………………. 203

Объявляйте зависимости явно……………………………………………………………………………….. 204

Экономичные библиотеки……………………………………………………………………………………………….. 204

Спектр возможностей………………………………………………………………………………………………………………. 205

Что нужно запомнить………………………………………………………………………………………………………………. 206

Глава 5. Оценка…………………………………………………………………………………… 209

Структура главы……………………………………………………………………………………………………………………… 209

Что такое оценка?……………………………………………………………………………………………………………………. 211

Зачем проводить оценку?……………………………………………………………………………………………………….. 211

Типичные проекты модернизации………………………………………………………………………………….. 212

Успешные проекты модернизации…………………………………………………………………………………. 212

Мотивация……………………………………………………………………………………………………………….. 213

Оценка……………………………………………………………………………………………………………………… 214

Следите за конусом неопределенности………………………………………………………………… 215

Технологические и бизнес-потребности……………………………………………………………….. 216

Стратегия модернизации……………………………………………………………………………………….. 217

Гибкий процесс разработки…………………………………………………………………………………… 217

Решения и компромиссы………………………………………………………………………………………………………….. 218

Создание или покупка……………………………………………………………………………………………………… 218

Обоснование покупки…………………………………………………………………………………………….. 219

Обоснование создания……………………………………………………………………………………………. 219

Переписывание или рефакторинг…………………………………………………………………………………… 221

Сила обратной совместимости………………………………………………………………………………………………. 225

Элементы надлежащей оценки………………………………………………………………………………………………. 227

Масштабный анализ кода………………………………………………………………………………………………. 227

Классификация и принятие решений…………………………………………………………………….. 229

Владелец………………………………………………………………………………………………………………….. 230

Скорость изменения бизнеса………………………………………………………………………………….. 231

Публичные контракты……………………………………………………………………………………………. 232

Нижестоящие зависимости…………………………………………………………………………………….. 233

Вышестоящие зависимости……………………………………………………………………………………. 234

Код ориентирован на пользователя?……………………………………………………………………. 234

Сложность……………………………………………………………………………………………………………….. 234

Уровень прохождения / покрытие тестами…………………………………………………………… 236

Анализ базы данных………………………………………………………………………………………………………… 236

Классификация уровня независимости…………………………………………………………………. 237

Классический монолит…………………………………………………………………………………………… 237

Микросервисы или надлежащие сервисы…………………………………………………………….. 237

Распределенный монолит………………………………………………………………………………………. 238

Различные фреймворки доступа к данным…………………………………………………………… 238

Изолированные схемы……………………………………………………………………………………………. 238

Изолированные таблицы……………………………………………………………………………………….. 239

Сопоставление бизнес-областей…………………………………………………………………………………….. 239

Список всех бизнес областей…………………………………………………………………………………. 241

Помещение системы в карантин……………………………………………………………………………. 242

Результаты оценки…………………………………………………………………………………………………………………… 243

Быстрые результаты………………………………………………………………………………………………………… 243

Определение приоритетов, ожиданий и стратегии……………………………………………………….. 244

Влияние на бизнес в сравнении с затраченными усилиями…………………………………………. 245

Порядок действий…………………………………………………………………………………………………………….. 247

Радикальные изменения…………………………………………………………………………………………………… 248

Что нужно запомнить………………………………………………………………………………………………………………. 249

Глава 6. Принципы надлежащего предоставления сервисов………………… 252

Структура главы……………………………………………………………………………………………………………………… 252

Сервис-ориентированная архитектура…………………………………………………………………………………. 253

Типы сервисов………………………………………………………………………………………………………………….. 254

Когда следует использовать сервисы…………………………………………………………………………….. 255

Когда следует отказаться от сервисов…………………………………………………………………………… 256

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

Сокращение сроков вывода на рынок…………………………………………………………………… 257

Сокращение затрат и упрощение обслуживания………………………………………………… 260

Расширяемость и адаптивность…………………………………………………………………………….. 263

Независимость………………………………………………………………………………………………………… 263

Краткое описание преимуществ SOA……………………………………………………………………. 265

Вначале контракт……………………………………………………………………………………………………………………. 268

Новый сервис……………………………………………………………………………………………………………………. 268

Существующий компонент……………………………………………………………………………………………… 269

Кодирование контракта с помощью OpenAPI………………………………………………………………. 270

Обратная совместимость…………………………………………………………………………………………………. 272

SOA и изоляция………………………………………………………………………………………………………………………… 276

Изоляция хранилищ данных…………………………………………………………………………………………… 277

Изоляция библиотек…………………………………………………………………………………………………………. 279

Противопоставление вкусов и мостов в библиотеках и монолитах…………………… 282

Изоляция публичных контрактов…………………………………………………………………………………… 286

Анализ проекта……………………………………………………………………………………………………….. 289

Автоматизация работоспособности контрактов…………………………………………………. 290

Неочевидные моменты…………………………………………………………………………………………… 291

Обработка ошибок в контрактах…………………………………………………………………………… 293

Доступность сервиса………………………………………………………………………………………………. 294

Что нужно запомнить………………………………………………………………………………………………………………. 296

Глава 7. Надлежащее тестирование сервисов……………………………………….. 301

Структура главы……………………………………………………………………………………………………………………… 301

Зачем нужно тестирование?…………………………………………………………………………………………………… 303

Корректность……………………………………………………………………………………………………………………. 304

Влияние изменений………………………………………………………………………………………………………….. 304

Готовность к эксплуатации…………………………………………………………………………………………….. 304

Особенности тестов программного обеспечения………………………………………………………………….. 305

Типы тестов………………………………………………………………………………………………………………………. 305

Признаки плохих тестов………………………………………………………………………………………………………….. 307

Непоследовательная частота отказов…………………………………………………………………………… 307

Хрупкость при рефакторинге………………………………………………………………………………………….. 308

Зависимость от данных…………………………………………………………………………………………………… 309

Неэффективные циклы тестирования……………………………………………………………………. 309

Постоянная настройка тестов…………………………………………………………………………………………. 310

Независимость тестов……………………………………………………………………………………………………… 310

Характеристики хороших тестов…………………………………………………………………………………………… 311

Постоянная вероятность успеха…………………………………………………………………………………….. 312

Устойчивость к рефакторингу………………………………………………………………………………………… 312

Изоляция зависимости от данных…………………………………………………………………………………… 313

Прямые входные данные………………………………………………………………………………………… 314

Внутренние состояния……………………………………………………………………………………………. 314

Быстрые циклы обратной связи……………………………………………………………………………………… 315

Самостоятельные тесты………………………………………………………………………………………………….. 315

Автономные тесты……………………………………………………………………………………………………………. 315

Манифест тестирования………………………………………………………………………………………………………….. 318

Тестирование на всем протяжении важнее, чем в конце………………………………………………. 318

Предотвращение ошибок важнее, чем их поиск……………………………………………………………. 319

Понимание при тестировании важнее, чем проверка функциональности………………….. 319

Создание наилучшей системы важнее, чем ее разрушение…………………………………………. 320

Ответственность команды за качество важнее, чем ответственность тестировщика… 320

Разнообразие тестирования……………………………………………………………………………………………………. 320

Почему тестирование важно для архитектуры программного обеспечения……………… 320

Лучшие практики тестирования сервисов……………………………………………………………………… 321

Практическое стресс-тестирование……………………………………………………………………………….. 322

Gatling для тестирования производительности……………………………………………………. 323

Пирамида тестирования………………………………………………………………………………………………….. 324

Стратегии для тестирования на продуктиве…………………………………………………………………. 326

Пограничный маршрутизатор……………………………………………………………………………….. 328

Пользователи бета-версии……………………………………………………………………………………… 329

Аудит в реальном времени / сравнение и сброс результатов……………………………… 330

Воспроизведение трафика……………………………………………………………………………………… 332

Хаотическое тестирование……………………………………………………………………………………………… 333

«Обезьянья армия» Netflix………………………………………………………………………………………. 336

Toxiproxy…………………………………………………………………………………………………………………. 337

Матрицы отказоустойчивости………………………………………………………………………………. 338

Внутреннее состояние — продвинутое глубокое погружение…………………………………….. 339

Генерация синтетических данных………………………………………………………………………… 340

Тестирование интерфейсов……………………………………………………………………………………. 341

Настройка тестовых данных…………………………………………………………………………………. 343

Макетирование интерфейсов…………………………………………………………………………………. 344

Что нужно запомнить………………………………………………………………………………………………………………. 345

Глава 8. Внедрение новых технологий…………………………………………………. 348

Структура главы……………………………………………………………………………………………………………………… 348

Применяем новые принципы…………………………………………………………………………………………………… 349

Ресурсы по требованию — облачные вычисления………………………………………………………………. 350

Стабильные контракты……………………………………………………………………………………………………. 352

Надлежащая изоляция…………………………………………………………………………………………………….. 353

Одна учетная запись на сервис………………………………………………………………………………………. 355

Одна учетная запись для каждой бизнес-области………………………………………………………… 358

Одна учетная запись для всего……………………………………………………………………………………….. 359

Организация учетных записей влияет на степень детализации контрактов………………. 359

Внутренние общие библиотеки………………………………………………………………………………………. 360

Бессерверность…………………………………………………………………………………………………………………. 361

Влияние облака на организацию работы команды……………………………………………………… 362

Готовые возможности — облачные сервисы и SaaS……………………………………………………………. 362

Реляционные хранилища данных и хранилища данных NoSQL………………………………… 363

Искусственный интеллект и аналитика…………………………………………………………………………. 365

Изолированные модули развертывания………………………………………………………………………………… 366

Контейнеры и Kubernetes………………………………………………………………………………………………… 366

Облачный спектр……………………………………………………………………………………………………………… 371

Доступ к потоковой передаче данных в режиме реального времени…………………………………. 374

Apache Kafka……………………………………………………………………………………………………………………. 374

Архитектура Kafka………………………………………………………………………………………………………….. 376

Kafka и CQRS/ES……………………………………………………………………………………………………………… 378

База данных ksqlDB…………………………………………………………………………………………………………. 380

Эффективные инженеры………………………………………………………………………………………………………….. 381

Современные языки программирования………………………………………………………………………… 382

Спектр языков программирования…………………………………………………………………………………. 383

Языки программирования JVM………………………………………………………………………………………. 385

Гибкие модели данных……………………………………………………………………………………………………………. 386

Базы данных NoSQL………………………………………………………………………………………………………… 386

Выход за рамки реляционной модели……………………………………………………………………………. 389

Бережливые коммуникации — бинарные API и GraphQL……………………………………………………. 391

Взаимодействие между сервисами: REST, gRPC и GraphQL……………………………………….. 391

Что в REST получилось правильным……………………………………………………………………………… 392

Совместимость в сравнении с производительностью…………………………………………………… 394

GraphQL…………………………………………………………………………………………………………………………….. 394

Фреймворк gRPC………………………………………………………………………………………………………………. 397

Что нужно запомнить………………………………………………………………………………………………………………. 399

Глава 9. Миграция кода……………………………………………………………………….. 403

Структура главы……………………………………………………………………………………………………………………… 403

Почему миграция кода имеет такое значение?……………………………………………………………………… 404

Инвентаризация, варианты использования и POC………………………………………………………… 406

Красная миграция в сравнении с зеленой……………………………………………………………………………… 408

Элементы надлежащей миграции кода…………………………………………………………………………………. 409

Цель миграции………………………………………………………………………………………………………………….. 409

Сложность………………………………………………………………………………………………………………………… 412

Влияние на клиентов — онлайн и офлайн…………………………………………………………………….. 416

Онлайн-режим миграции………………………………………………………………………………………… 417

Офлайн-режим миграции……………………………………………………………………………………….. 417

Команда сервисов по сравнению с командой платформы…………………………………………… 419

Шаблоны миграции кода………………………………………………………………………………………………………… 421

Обратная совместимость…………………………………………………………………………………………………. 421

Отложенная миграция……………………………………………………………………………………………………… 421

Strangler Fig……………………………………………………………………………………………………………………….. 424

Преобразование классического монолита в надлежащий SOA…………………………. 425

Преобразование классического монолита в модульный монолит…………………….. 428

Преобразование распределенного монолита в надлежащий SOA…………………….. 429

Двусторонние двери Amazon………………………………………………………………………………………….. 433

Препятствия при миграции……………………………………………………………………………………………………… 433

Препятствие — остаточные явления………………………………………………………………………………. 433

Удвоение усилий по инвентаризации и проверке концепций……………………………… 434

Распределенные миграции и зависимость от команды……………………………………….. 434

Повторение, повторение, повторение……………………………………………………………………. 434

Препятствия — трения и энтропия…………………………………………………………………………………. 434

Препятствия — высокие WIP-лимиты, давление бизнеса, соблюдение требований и другие ловушки     435

Пост-миграционный период……………………………………………………………………………………………………. 436

Стратегии отката……………………………………………………………………………………………………………… 436

Что нужно запомнить………………………………………………………………………………………………………………. 437

Глава 10. Миграция данных………………………………………………………………… 440

Структура главы……………………………………………………………………………………………………………………… 440

Риски миграции данных………………………………………………………………………………………………………….. 441

Подготовка миграции данных………………………………………………………………………………………………… 442

Инвентаризация и анализ………………………………………………………………………………………………… 442

Планирование и определение быстрых выигрышей…………………………………………………….. 446

Шаблоны миграции данных…………………………………………………………………………………………………… 448

Повторный просмотр отложенных миграций……………………………………………………………….. 448

Экспорт и импорт…………………………………………………………………………………………………………….. 450

Репликация базы данных………………………………………………………………………………………………… 452

Сравнение таблиц……………………………………………………………………………………………………………. 454

Триггеры……………………………………………………………………………………………………………………………. 455

Захват изменения данных……………………………………………………………………………………………….. 456

Двойная запись…………………………………………………………………………………………………………………. 458

Незавершенные данные…………………………………………………………………………………………. 459

Сбой при выполнении одной операции записи……………………………………………………. 459

Задержка и сложность транзакций……………………………………………………………………….. 460

Стратегии миграции данных………………………………………………………………………………………………….. 460

Онлайн или офлайн………………………………………………………………………………………………………….. 461

Вначале схема или несколько миграций……………………………………………………………………….. 461

Пересмотр: Strangler Fig…………………………………………………………………………………………………… 462

Классические монолиты, Strangler Fig и миграция данных…………………………………. 463

Выполнение миграции…………………………………………………………………………………………………………….. 465

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

Проверка работоспособности перед миграцией…………………………………………………………… 466

Тестирование производительности………………………………………………………………………………… 468

Практическое тестирование производительности базы данных
с помощью NDBench………………………………………………………………………………………………………… 469

Проверка работоспособности: структура и данные после миграции………………………… 470

Наблюдаемость……………………………………………………………………………………………………………….. 470

После миграции данных………………………………………………………………………………………………………….. 474

Охота на призраков…………………………………………………………………………………………………………. 474

Очистка и вывод из эксплуатации………………………………………………………………………………….. 476

Что нужно запомнить………………………………………………………………………………………………………………. 476

Глава 11. Эпилог………………………………………………………………………………….. 481

Структура главы……………………………………………………………………………………………………………………… 481

На бис!………………………………………………………………………………………………………………………………………. 481

Принципы важнее всего…………………………………………………………………………………………………………… 483

Образование…………………………………………………………………………………………………………………………….. 484

Городское планирование………………………………………………………………………………………………………… 485

Концепция………………………………………………………………………………………………………………………………… 487

Далее…………………………………………………………………………………………………………………………………………. 488

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

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

Хит: “Excel. Сборник рецептов”

Книга посвящена практическому использованию Microsoft Excel для решения широкого спектра задач. Показано создание информативных диаграмм и графиков-спарклайнов, работа с 3D-картами, использование сводных таблиц для сегментации, фрагментации и обобщения данных, проведение статистического и финансового анализа с помощью формул, листов прогноза и пакета анализа. Рассмотрены функции динамических массивов, демонстрируются методы импорта и обработки данных с помощью Power Query, а также создание пользовательских функций с использованием лямбда-формул и возможностей VBA для автоматизации работы. Книга содержит более 350 готовых решений по различным темам, сочетает традиционные и современные подходы, помогая экономить время, повышать продуктивность и эффективно применять Excel в профессиональной деятельности.

Для пользователей Excel любого уровня

Электронный архив к книге  можно скачать по ссылке https://github.com/stringfestdata/modern-analytics-excel-book

Эта книга, наполненная практическими советами, приемами и объяснениями проверенных методов работы, станет вашим незаменимым помощником в изучении Microsoft Excel. В ней собрано более 350 готовых решений по различным темам — от формул и сводных таблиц до диаграмм, Power Query и рекомендаций по использованию других полезных инструментов. Каждый раздел начинается с конкретной задачи и сопровождается подробным описанием способа её решения, который вы можете применить сразу, не выискивая ответ в других источниках.
Неважно, кто вы — аналитик данных, руководитель проекта, финансовый директор или начинающий пользователь Excel — автор поможет вам отыскать правильное решение ваших задач. Книга идеально подходит как в качестве справочного пособия, так и для обучения более эффективной работе, она помогает сэкономить время и заметно повысить продуктивность. С ней вы сможете быстро получить ответы на любые вопросы, возникающие в ходе работы с Excel.

Откройте для себя способы создания отчетов и аналитики, которые раньше казались трудновыполнимыми, а порой и вовсе невозможными в Excel.

• Создавайте воспроизводимые и надежные процессы очистки данных в Excel с помощью Power Query
• Проектируйте реляционные модели и настраивайте аналитические показатели, используя Power Pivot
• Быстро извлекайте и трансформируйте данные благодаря функциям динамических массивов
• Применяйте возможности искусственного интеллекта для выявления скрытых закономерностей и трендов
• Интегрируйте Python в работу с Excel для автоматизации анализа и отчётности

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

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

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

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

Условные обозначения……………………………………………………………………………………………………………… 15

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

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

Как с нами связаться?………………………………………………………………………………………………………………… 17

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

Глава 1. Рабочие книги, рабочие листы и ячейки………………………………….. 19

1.1. Применяем темы………………………………………………………………………………………………………………….. 19

1.2. Применяем стили ячеек………………………………………………………………………………………………………. 20

1.3. Форматируем ячейки………………………………………………………………………………………………………….. 21

1.4. Форматируем значение ячейки………………………………………………………………………………………….. 22

1.5. Задаем пользовательский числовой формат……………………………………………………………………. 24

1.6. Объединяем ячейки……………………………………………………………………………………………………………… 28

1.7. Создаем шаблоны……………………………………………………………………………………………………………….. 29

1.8. Защищаем файлы, рабочие книги, рабочие листы и ячейки Excel…………………………………. 31

1.9. Используем условное форматирование……………………………………………………………………………. 32

1.10. Применяем формат по образцу………………………………………………………………………………………… 34

1.11. Используем специальную вставку…………………………………………………………………………………… 35

1.12. Используем автозаполнение……………………………………………………………………………………………. 36

1.13. Используем пользовательские списки…………………………………………………………………………….. 38

1.14. Используем мгновенное заполнение……………………………………………………………………………….. 40

1.15. Настраиваем автозамену…………………………………………………………………………………………………. 42

1.16. Используем заметки и примечания………………………………………………………………………………….. 43

1.17. Находим и выделяем ячейки и перемещаемся по ним…………………………………………………… 45

1.18. Создаем представление……………………………………………………………………………………………………. 47

1.19. Настраиваем ленту и ее вкладки…………………………………………………………………………………….. 48

1.20. Используем панель быстрого доступа……………………………………………………………………………. 49

1.21. Проверяем читаемость……………………………………………………………………………………………………… 50

Глава 2. Ссылки и структурированные данные…………………………………….. 53

2.1. Используем относительные и абсолютные ссылки…………………………………………………………. 53

2.2. Используем относительные и абсолютные ссылки в условном форматировании……….. 55

2.3. Используем стиль ссылок R1C1………………………………………………………………………………………… 56

2.4. Ссылаемся на другой рабочий лист или книгу………………………………………………………………… 58

2.5. Используем 3D-ссылки……………………………………………………………………………………………………….. 59

2.6. Именуем ячейки, диапазоны, константы и формулы……………………………………………………….. 60

2.7. Создаем динамические именованные диапазоны……………………………………………………………. 63

2.8. Проверяем данные………………………………………………………………………………………………………………. 64

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

2.10. Вводим данные с помощью раскрывающегося списка…………………………………………………. 67

2.11. Определяем зависимые, или каскадные, раскрывающиеся списки………………………………. 69

2.12. Используем форму ввода данных……………………………………………………………………………………. 70

2.13. Сортируем данные по значению, формату или пользовательскому списку……………….. 72

2.14. Фильтруем данные……………………………………………………………………………………………………………. 73

2.15. Закрепляем области………………………………………………………………………………………………………….. 75

2.16. Используем автосумму…………………………………………………………………………………………………….. 76

2.17. Используем структуру для добавления промежуточных итогов и групп……………………. 77

2.18. Используем таблицы………………………………………………………………………………………………………… 78

2.19. Используем структурированные ссылки………………………………………………………………………… 81

Глава 3. Используем формулы……………………………………………………………….. 85

3.1. Используем операторы и порядок очередности………………………………………………………………. 85

3.2. Используем Excel в различных регионах и на разных языках……………………………………….. 88

3.3. Используем константы массивов………………………………………………………………………………………. 89

3.4. Используем динамические и устаревшие формулы массивов………………………………………… 90

3.5. Используем ссылки на диапазон разлива…………………………………………………………………………. 92

3.6. Предотвращаем поведение динамического массива……………………………………………………….. 93

3.7. Используем Вставку функции или инструмент Построитель формул………………………….. 94

3.8. Добавляем заметки в числовые формулы…………………………………………………………………………. 95

3.9. Отображаем формулы………………………………………………………………………………………………………… 96

3.10. Используем Окно контрольного значения……………………………………………………………………….. 96

3.11. Отображаем взаимозависимости ячеек…………………………………………………………………………… 97

3.12. Выполняем фоновую проверку ошибок………………………………………………………………………….. 99

3.13. Проверяем ошибки в таблице………………………………………………………………………………………… 100

3.14. Ищем источники ошибок………………………………………………………………………………………………… 101

3.15. Исправляем ошибки в значениях…………………………………………………………………………………… 102

3.16. Вычисляем формулы………………………………………………………………………………………………………. 104

3.17. Меняем режим вычисления……………………………………………………………………………………………. 106

3.18. Настраиваем точность округления……………………………………………………………………………….. 108

3.19. Работаем с циклическими ссылками…………………………………………………………………………….. 109

Глава 4. Математические операции……………………………………………………… 111

4.1. Генерируем числа…………………………………………………………………………………………………………….. 111

4.2. Преобразуем текст или булево выражение в число………………………………………………………. 112

4.3. Узнаем знак и абсолютное значение числа……………………………………………………………………. 113

4.4. Подсчитываем, суммируем и усредняем значения ячеек………………………………………………. 113

4.5. Используем критерии для подсчета, суммирования и среднего значения…………………… 115

4.6. Складываем и вычитаем значения в квадрате……………………………………………………………….. 116

4.7. Используем умножение и кратные значения………………………………………………………………….. 118

4.8. Находим частные, остатки и делители…………………………………………………………………………… 119

4.9. Округляем до десятичных разрядов и целых чисел………………………………………………………. 120

4.10. Округляем до значащих цифр и кратных значений…………………………………………………….. 121

4.11. Используем степени, экспоненты, квадратные корни и логарифмы………………………….. 123

4.12. Суммируем степенной ряд……………………………………………………………………………………………… 124

4.13. Используем факториалы, перестановки и комбинации………………………………………………. 124

4.14. Используем тригонометрию…………………………………………………………………………………………… 126

4.15. Работаем с матрицами……………………………………………………………………………………………………. 126

4.16. Преобразуем одну систему счисления в другую…………………………………………………………. 128

4.17. Выполняем побитовые операции………………………………………………………………………………….. 129

4.18. Работаем с комплексными числами………………………………………………………………………………. 130

Глава 5. Работа с текстом…………………………………………………………………….. 133

5.1. Объединяем текст……………………………………………………………………………………………………………… 133

5.2. Используем символьный код……………………………………………………………………………………………. 134

5.3. Генерируем последовательность символов……………………………………………………………………. 135

5.4. Генерируем случайные буквы…………………………………………………………………………………………. 136

5.5. Определяем длину текстовой строки………………………………………………………………………………. 136

5.6. Определяем местоположение текста в текстовой строке………………………………………………. 136

5.7. Извлекаем текст фиксированной ширины из текстовой строки……………………………………. 138

5.8. Извлекаем текст из текстовой строки с помощью разделителя…………………………………….. 139

5.9. Разбиваем текст в текстовой строке на цифровой и нецифровой…………………………………. 141

5.10. Заменяем, вставляем и удаляем текст…………………………………………………………………………… 142

5.11. Удаляем лишние символы……………………………………………………………………………………………… 143

5.12. Подсчитываем слова или конкретные символы…………………………………………………………… 144

5.13. Меняем регистр текста…………………………………………………………………………………………………… 145

5.14. Повторяем символы………………………………………………………………………………………………………… 145

5.15. Преобразуем массив в текст…………………………………………………………………………………………… 146

5.16. Форматируем текст в формат валюты………………………………………………………………………….. 147

5.17. Включаем числовые значения в текстовую строку……………………………………………………… 148

5.18. Включаем дату/время в текстовую строку…………………………………………………………………… 149

Глава 6. Дата и время…………………………………………………………………………… 151

6.1. Возвращаем текущие дату и время…………………………………………………………………………………. 151

6.2. Получаем часть значения даты/времени………………………………………………………………………… 152

6.3. Получаем день недели и неделю года…………………………………………………………………………….. 152

6.4. Получаем календарный или финансовый квартал………………………………………………………… 153

6.5. Создаем даты с помощью дня, месяца и года………………………………………………………………… 154

6.6. Создаем время с помощью часов, минут и секунд…………………………………………………………. 156

6.7. Преобразуем текстовое значение в порядковый номер даты/времени………………………… 157

6.8. Извлекаем дату и время из порядкового номера……………………………………………………………. 158

6.9. Добавляем к дате дни, месяцы и годы…………………………………………………………………………….. 159

6.10. Добавляем ко времени часы, минуты и секунды………………………………………………………….. 160

6.11. Получаем последний день месяца…………………………………………………………………………………. 161

6.12. Вычисляем долю года…………………………………………………………………………………………………….. 162

6.13. Вычисляем разницу между значениями дат и времени……………………………………………….. 163

6.14. Обрабатываем рабочие дни…………………………………………………………………………………………… 164

6.15. Получаем последовательность дат………………………………………………………………………………. 165

Глава 7. Массивы, логика и функции поиска………………………………………. 167

7.1. Получаем уникальные значения……………………………………………………………………………………… 167

7.2. Сортируем массив…………………………………………………………………………………………………………….. 168

7.3. Фильтруем массив…………………………………………………………………………………………………………….. 169

7.4. Преобразовываем массивы………………………………………………………………………………………………. 171

7.5. Используем логические критерии Истина и Ложь………………………………………………………… 173

7.6. Оцениваем условия И и ИЛИ в формулах массивов………………………………………………………. 174

7.7. Работаем с типами и ошибками в значениях………………………………………………………………….. 175

7.8. Выбираем возвращаемые значения………………………………………………………………………………… 176

7.9. Ищем точные и ближайшие значения……………………………………………………………………………… 178

7.10. Ищем индекс сопоставимого значения…………………………………………………………………………. 180

7.11. Используем индекс для возврата значения…………………………………………………………………… 181

7.12. Создаем косвенные ссылки на ячейки и диапазоны……………………………………………………. 183

7.13. Извлекаем адрес ячейки…………………………………………………………………………………………………. 185

7.14. Используем смещенные ссылки…………………………………………………………………………………….. 185

Глава 8. Статистический анализ………………………………………………………….. 187

8.1. Создаем таблицу частот………………………………………………………………………………………………….. 187

8.2. Отображаем накопленные и процентные частоты………………………………………………………… 189

8.3. Используем гистограмму или диаграмму Парето………………………………………………………….. 191

8.4. Вычисляем среднее…………………………………………………………………………………………………………… 193

8.5. Ранжируем числовые данные………………………………………………………………………………………….. 195

8.6. Находим k-е наибольшее или наименьшее значение…………………………………………………….. 196

8.7. Разделяем данные на квартили и процентили……………………………………………………………….. 197

8.8. Рассчитываем диапазоны и дисперсии…………………………………………………………………………… 198

8.9. Поиск выбросов…………………………………………………………………………………………………………………. 199

8.10. Используем диаграмму «ящик с усами»……………………………………………………………………….. 200

8.11. Рассчитываем асимметрию……………………………………………………………………………………………. 201

8.12. Рассчитываем вероятности с помощью таблицы вероятностей…………………………………. 202

8.13. Рассчитываем математическое ожидание и дисперсию……………………………………………… 204

8.14. Используем биномиальное распределение………………………………………………………………….. 204

8.15. Используем отрицательное биномиальное распределение………………………………………… 206

8.16. Используем гипергеометрическое распределение………………………………………………………. 207

8.17. Используем распределение Пуассона………………………………………………………………………….. 208

8.18. Используем экспоненциальное распределение……………………………………………………………. 208

8.19. Используем нормальное распределение………………………………………………………………………. 209

8.20. Используем Z-значения………………………………………………………………………………………………….. 211

8.21. Вычисляем доверительный интервал для среднего генеральной совокупности………. 212

8.22. Используем критерий независимости хи-квадрат (χ2)…………………………………………………. 214

8.23. Ищем линию наилучшего соответствия……………………………………………………………………….. 215

8.24. Получаем уравнение линии наилучшего соответствия………………………………………………. 217

Глава 9. Надстройка Пакет анализа…………………………………………………….. 219

9.1. Устанавливаем Пакет анализа………………………………………………………………………………………… 219

9.2. Генерируем описательную статистику…………………………………………………………………………… 220

9.3. Генерируем порядковые номера и процентные ранги…………………………………………………… 222

9.4. Генерируем частотное распределение…………………………………………………………………………… 224

9.5. Генерируем скользящее среднее……………………………………………………………………………………… 227

9.6. Используем экспоненциальное сглаживание…………………………………………………………………. 229

9.7. Генерируем случайную выборку…………………………………………………………………………………….. 231

9.8. Генерируем периодическую выборку…………………………………………………………………………….. 233

9.9. Извлекаем случайные числа из распределения……………………………………………………………… 233

9.10. Генерируем корреляционную матрицу………………………………………………………………………… 235

9.11. Получаем матрицу ковариаций…………………………………………………………………………………….. 237

9.12. Проводим линейный регрессионный анализ………………………………………………………………… 238

9.13. Используем двухвыборочный t-критерий Стьюдента…………………………………………………. 241

9.14. Проводим двухвыборочный z-тест……………………………………………………………………………….. 243

9.15. Проводим парный двухвыборочный t-тест………………………………………………………………….. 245

9.16. Проводим двухвыборочный F-тест для дисперсии……………………………………………………… 247

9.17. Проводим однофакторный дисперсионный анализ…………………………………………………….. 249

9.18. Проводим двухфакторный дисперсионный анализ…………………………………………………….. 251

9.19. Проводим анализ Фурье…………………………………………………………………………………………………. 253

Глава 10. Финансовый анализ……………………………………………………………… 257

10.1. Рассчитываем платежи по кредитам с фиксированной процентной ставкой……………. 257

10.2. Рассчитываем выплаты процентов и основной суммы кредита…………………………………. 258

10.3. Составляем график амортизации кредита с плавающей ставкой………………………………. 260

10.4. Рассчитываем срок для кредита с фиксированной ставкой………………………………………… 262

10.5. Рассчитываем номинальную или текущую стоимость……………………………………………….. 263

10.6. Конвертируем номинальную процентную ставку в реальную…………………………………… 263

10.7. Рассчитываем будущую стоимость единовременной инвестиции
с фиксированной ставкой……………………………………………………………………………………………….. 265

10.8. Рассчитываем будущую стоимость единовременной инвестиции с
плавающей ставкой………………………………………………………………………………………………………… 266

10.9. Рассчитываем будущую стоимость инвестиции с регулярными вложениями………….. 267

10.10. Достигаем инвестиционных целей………………………………………………………………………………. 268

10.11. Рассчитываем чистую приведенную стоимость………………………………………………………… 269

10.12. Рассчитываем внутреннюю ставку доходности………………………………………………………… 271

10.13. Рассчитываем амортизацию………………………………………………………………………………………… 273

10.14. Получаем данные акций и валют………………………………………………………………………………… 274

10.15. Получаем исторические данные акций и валют………………………………………………………… 276

10.16. Используем биржевые диаграммы………………………………………………………………………………. 276

10.17. Рассчитываем бета-коэффициент акции…………………………………………………………………….. 278

10.18. Прогнозируем линейный и экспоненциальный рост…………………………………………………. 279

10.19. Прогнозируем сезонный рост………………………………………………………………………………………. 280

Глава 11. Сводные таблицы…………………………………………………………………. 285

11.1. Организуем данные для сводных таблиц……………………………………………………………………… 285

11.2. Вставляем сводную таблицу…………………………………………………………………………………………. 286

11.3. Добавляем строки, столбцы и значения……………………………………………………………………….. 288

11.4. Используем дополнительные строки…………………………………………………………………………….. 290

11.5. Обновляем данные сводной таблицы……………………………………………………………………………. 291

11.6. Перемещаем сводную таблицу……………………………………………………………………………………… 292

11.7. Изменяем внешний вид сводной таблицы…………………………………………………………………….. 293

11.8. Изменяем макет по умолчанию……………………………………………………………………………………… 294

11.9. Изменяем агрегацию значений………………………………………………………………………………………. 295

11.10. Отображаем различные вычисления значений………………………………………………………….. 296

11.11. Создаем пользовательские промежуточные итоги……………………………………………………. 298

11.12. Сортируем данные……………………………………………………………………………………………………….. 299

11.13. Перемещаем элементы вручную…………………………………………………………………………………. 300

11.14. Фильтруем данные……………………………………………………………………………………………………….. 300

11.15. Используем фильтр для создания нескольких сводных таблиц……………………………….. 302

11.16. Группируем по дате/времени………………………………………………………………………………………. 303

11.17. Группируем по числу…………………………………………………………………………………………………… 305

11.18. Группируем вручную по текстовым значениям…………………………………………………………. 306

11.19. Включаем группы с отсутствующими данными………………………………………………………… 307

11.20. Изменяем формат пустых ячеек…………………………………………………………………………………… 308

11.21. Используем вычисляемые поля……………………………………………………………………………………. 309

11.22. Используем вычисляемые поля для подсчета элементов………………………………………….. 312

11.23. Используем вычисляемые элементы…………………………………………………………………………… 312

11.24. Ссылаемся на местоположение в формуле вычисляемого элемента……………………….. 316

11.25. Изменяем порядок расчета вычисляемого элемента…………………………………………………. 316

11.26. Формируем список пользовательских формул…………………………………………………………… 319

11.27. Изменяем источник данных сводной таблицы…………………………………………………………… 319

11.28. Используем кеш сводной таблицы………………………………………………………………………………. 320

11.29. Фильтруем несколько сводных таблиц, совместно использующих один кеш………… 322

11.30. Уменьшаем размер файла рабочей книги…………………………………………………………………… 323

11.31. Восстанавливаем исходные данные сводной таблицы…………………………………………….. 324

11.32. Ссылаемся на значения сводной таблицы…………………………………………………………………. 325

Глава 12. Диаграммы…………………………………………………………………………… 327

12.1. Используем различные типы диаграмм………………………………………………………………………… 327

12.2. Вставляем диаграмму…………………………………………………………………………………………………….. 333

12.3. Фильтруем диаграмму……………………………………………………………………………………………………. 334

12.4. Настраиваем внешний вид диаграммы…………………………………………………………………………. 335

12.5. Добавляем и удаляем элементы диаграммы………………………………………………………………… 336

12.6. Форматируем элементы диаграммы……………………………………………………………………………… 337

12.7. Создаем динамические заголовки и метки……………………………………………………………………. 342

12.8. Настраиваем текст меток данных…………………………………………………………………………………. 342

12.9. Управляем осями и линиями сетки диаграммы……………………………………………………………. 344

12.10. Отображаем отрицательные значения……………………………………………………………………….. 345

12.11. Используем в гистограммах рисунки………………………………………………………………………….. 346

12.12. Форматируем вторичную круговую и линейчатую диаграмму……………………………….. 347

12.13. Форматируем гистограммы…………………………………………………………………………………………. 348

12.14. Задаем типы диаграмм для комбинированной диаграммы………………………………………. 350

12.15. Управляем пустыми ячейками…………………………………………………………………………………….. 351

12.16. Основываем диаграмму на независимых данных……………………………………………………… 352

12.17. Изменяем имена рядов данных и элементы легенды…………………………………………………. 353

12.18. Добавляем ряд или изменяем источник данных………………………………………………………… 354

12.19. Основываем диаграмму на динамическом именованном диапазоне………………………. 355

12.20. Вставляем сводную диаграмму…………………………………………………………………………………… 357

12.21. Создаем диаграмму Ганта…………………………………………………………………………………………… 358

12.22. Создаем и используем шаблоны диаграмм………………………………………………………………… 359

Глава 13. Графика, спарклайны и 3D-карты……………………………………….. 361

13.1. Вставляем символы………………………………………………………………………………………………………… 361

13.2. Вставляем уравнения……………………………………………………………………………………………………… 362

13.3. Вставляем фигуры…………………………………………………………………………………………………………… 363

13.4. Используем инструмент Рисование………………………………………………………………………………. 364

13.5. Используем SmartArt………………………………………………………………………………………………………. 365

13.6. Вставляем рисунки…………………………………………………………………………………………………………. 366

13.7. Группируем объекты………………………………………………………………………………………………………. 368

13.8. Перемещаем и изменяем размеры объектов вместе с ячейками………………………………….. 369

13.9. Вставляем связанный рисунок………………………………………………………………………………………. 370

13.10. Используем спарклайны………………………………………………………………………………………………. 371

13.11. Используем группы спарклайнов………………………………………………………………………………… 374

13.12. Используем 3D-карты…………………………………………………………………………………………………… 375

13.13. Создаем видео с помощью 3D-карт…………………………………………………………………………….. 378

Глава 14. Анализ «что если»…………………………………………………………………. 381

14.1. Создаем таблицу данных с одной переменной……………………………………………………………. 381

14.2. Создаем ориентированную на строку таблицу данных с одной переменной………….. 383

14.3. Создаем таблицу данных с двумя переменными…………………………………………………………. 384

14.4. Редактируем таблицы данных………………………………………………………………………………………. 386

14.5. Используем диспетчер сценариев…………………………………………………………………………………. 387

14.6. Объединяем сценарии…………………………………………………………………………………………………….. 390

14.7. Генерируем сводки сценариев……………………………………………………………………………………….. 390

14.8. Используем инструмент Подбор параметра……………………………………………………………….. 392

14.9. Находим несколько решений с помощью подбора параметра………………………………….. 394

14.10. Находим решение формулы, описывающей функцию, имеющую разрывы, с помощью подбора параметра    395

14.11. Устанавливаем надстройку Поиск решения………………………………………………………………. 397

14.12. Решаем с помощью надстройки Поиск решения проблемы оптимизации……………….. 398

14.13. Используем в надстройке Поиск решения ограничение «только целые числа»……… 403

14.14. Используем в в надстройке Поиск решения ограничение «только двоичные»………… 406

14.15. Создаем с помощью надстройки Поиск решения изменяемые ячейки
с разными значениями………………………………………………………………………………………………….. 410

14.16. Решаем с помощью надстройки Поиск решения проблему разрывов функции………. 413

14.17. Находим с помощью надстройки Поиск решения несколько решений……………………. 415

14.18. Находим с помощью надстройки Поиск решения глобальный минимум или максимум функции           417

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

14.20. Сохраняем и загружаем параметры надстройки Поиск решения…………………………….. 422

14.21. Сохраняем сценарии, сгенерированные надстройкой Поиск решения……………………. 423

14.22. Отображаем отчеты надстройки Поиск решения………………………………………………………. 423

Глава 15. Power Query………………………………………………………………………….. 425

15.1. Получаем и загружаем данные……………………………………………………………………………………… 425

15.2. Получаем и загружаем данные из файлов в папке………………………………………………………. 427

15.3. Указываем, куда загрузить данные……………………………………………………………………………….. 428

15.4. Редактируем настройки и безопасность источника данных………………………………………. 430

15.5. Обновляем данные запроса……………………………………………………………………………………………. 432

15.6. Управляем запросами…………………………………………………………………………………………………….. 433

15.7. Редактируем запрос………………………………………………………………………………………………………… 435

15.8. Управляем шагами запроса…………………………………………………………………………………………… 437

15.9. Управляем столбцами…………………………………………………………………………………………………….. 437

15.10. Используем типы данных…………………………………………………………………………………………….. 438

15.11. Сортируем и фильтруем данные…………………………………………………………………………………. 440

15.12. Фильтруем файлы при загрузке данных из папки……………………………………………………… 441

15.13. Удаляем дубликаты, пустые строки и ошибки…………………………………………………………… 442

15.14. Преобразуем данные в столбцах………………………………………………………………………………… 443

15.15. Разделяем и объединяем столбцы……………………………………………………………………………….. 447

15.16. Выполняем сведение столбцов……………………………………………………………………………………. 449

15.17. Отменяем сведение столбцов……………………………………………………………………………………….. 450

15.18. Преобразуем структурированные столбцы……………………………………………………………….. 451

15.19. Возвращаем значение или список……………………………………………………………………………….. 452

15.20. Добавляем новые столбцы…………………………………………………………………………………………… 453

15.21. Добавляем столбцы, основанные на примерах…………………………………………………………. 455

15.22. Добавляем условный столбец……………………………………………………………………………………… 457

15.23. Добавляем настраиваемый столбец……………………………………………………………………………. 458

15.24. Используем параметры………………………………………………………………………………………………… 460

15.25. Создаем пользовательскую функцию…………………………………………………………………………. 462

15.26. Добавляем столбец, вызывая пользовательскую функцию………………………………………. 465

15.27. Дублируем отчет…………………………………………………………………………………………………………… 466

15.28. Ссылаемся на запрос……………………………………………………………………………………………………. 466

15.29. Добавляем данные из нескольких запросов……………………………………………………………….. 468

15.30. Объединяем данные из нескольких запросов…………………………………………………………….. 469

15.31. Редактируем М-код запроса………………………………………………………………………………………… 471

Глава 16. Power Pivot и модель данных………………………………………………… 473

16.1. Устанавливаем Power Pivot……………………………………………………………………………………………. 473

16.2. Добавляем данные в модель данных…………………………………………………………………………….. 474

16.3. Управляем соединениями данных Power Pivot…………………………………………………………….. 475

16.4. Просматриваем таблицы модели данных и управляем ими……………………………………….. 477

16.5. Обновляем данные модели данных………………………………………………………………………………. 479

16.6. Работаем со столбцами таблицы………………………………………………………………………………….. 480

16.7. Создаем и изменяем взаимосвязи…………………………………………………………………………………… 482

16.8. Добавляем вычисляемый столбец…………………………………………………………………………………. 484

16.9. Создаем сводную таблицу или сводную диаграмму на основе модели данных……… 487

16.10. Вставляем меры…………………………………………………………………………………………………………….. 489

16.11. Используем КПЭ…………………………………………………………………………………………………………… 492

16.12. Создаем иерархии………………………………………………………………………………………………………… 496

16.13. Создаем таблицу данных…………………………………………………………………………………………….. 498

16.14. Используем именованные наборы………………………………………………………………………………. 500

16.15. Преобразуем сводную таблицу в формулы……………………………………………………………….. 504

16.16. Используем формулы кубов…………………………………………………………………………………………. 505

16.17. Фильтруем формулы кубов с помощью срезов и временных шкал………………………….. 508

Глава 17. LET, LAMBDA и вспомогательные лямбда-функции……………… 511

17.1. Повышаем эффективность формулы……………………………………………………………………………… 511

17.2. Пишем и тестируем лямбда-функции……………………………………………………………………………. 512

17.3. Делаем лямбда-аргументы необязательными……………………………………………………………… 514

17.4. Определяем пользовательскую лямбда-функцию……………………………………………………….. 515

17.5. Пишем рекурсивные лямбда-формулы…………………………………………………………………………. 516

17.6. Копируем пользовательскую лямбда-функцию в другую рабочую книгу………………… 518

17.7. Применяем лямбда-формулу в каждом столбце…………………………………………………………… 519

17.8. Применяем лямбда-формулу в каждой строке……………………………………………………………… 521

17.9. Создаем массив вычисляемых значений………………………………………………………………………. 522

17.10. Преобразуем значения в массивах……………………………………………………………………………… 524

17.11. Вычисляем кумулятивные значения……………………………………………………………………………. 525

17.12. Возвращаем конечное значение кумулятивного вычисления…………………………………… 527

Глава 18. Инструменты разработчика: макросы, VBA, элементы управления и XML      531

18.1. Отображаем вкладку Разработчик………………………………………………………………………………. 531

18.2. Записываем макросы……………………………………………………………………………………………………… 532

18.3. Используем личную книгу макросов…………………………………………………………………………….. 534

18.4. Редактируем настройки макроса…………………………………………………………………………………… 535

18.5. Запускаем макрос…………………………………………………………………………………………………………… 536

18.6. Просматриваем и редактируем VBA-код макроса………………………………………………………. 537

18.7. Используем абсолютные и относительные ссылки……………………………………………………… 540

18.8. Создаем макрос путем написания VBA-кода………………………………………………………………. 541

18.9. Создаем пользовательскую функцию VBA………………………………………………………………….. 542

18.10. Используем события рабочих листов и рабочих книг………………………………………………. 544

18.11. Переопределяем комбинацию клавиш с помощью OnKey………………………………………… 547

18.12. Планируем выполнение кода с помощью OnTime……………………………………………………… 549

18.13. Удаляем макрос или функцию…………………………………………………………………………………….. 550

18.14. Копируем код в другой VBA-проект…………………………………………………………………………… 551

18.15. Исправляем ошибки VBA-кода……………………………………………………………………………………. 552

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

18.17. Используем элементы управления формы………………………………………………………………….. 558

18.18. Используем элементы управления ActiveX………………………………………………………………… 562

18.19. Создаем пользовательскую форму……………………………………………………………………………… 568

18.20. Создаем пользовательскую надстройку Excel…………………………………………………………… 571

18.21. Настраиваем параметры безопасности и конфиденциальности……………………………… 573

18.22. Импортируем и экспортируем XML-файлы……………………………………………………………….. 574

Дальнейшие шаги………………………………………………………………………………… 577

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

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

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

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

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

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

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

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

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

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

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

 

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

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

 

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

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

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

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

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

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

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

Введение. 17

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

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

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

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

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

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

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

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

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

– ГЛАВА 1 –

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

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

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

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

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

– ГЛАВА 2 –

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

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

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

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

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

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

Объект None. 53

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

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

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

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

Модуль cmath. 65

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

– ГЛАВА 3 –

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

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

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

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

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

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

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

Цикл while. 81

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

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

Python Enhancement Proposals (PEP) 87

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

– ГЛАВА 4 –

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

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

Массивы.. 90

Списки. 92

Кортежи. 93

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

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

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

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

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

Срезы.. 101

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

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

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

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

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

– ГЛАВА 5 –

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

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

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

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

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

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

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

– ГЛАВА 6 –

Словари. 133

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

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

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

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

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

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

– ГЛАВА 7 –

Множества. 144

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

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

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

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

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

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

– ГЛАВА 8 –

Строки. 153

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

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

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

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

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

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

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

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

– ГЛАВА 9 –

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

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

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

f-строки. 181

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

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

– ГЛАВА 10 –

Функции. 191

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

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

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

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

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

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

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

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

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

– ГЛАВА 11 –

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

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

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

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

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

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

– ГЛАВА 12 –

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

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

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

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

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

– ГЛАВА 13 –

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

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

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

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

Свойства. 251

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

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

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

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

– ГЛАВА 14 –

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

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

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

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

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

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

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

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

– ГЛАВА 15 –

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

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

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

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

– ГЛАВА 16 –

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

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

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

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

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

– ГЛАВА 17 –

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

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

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

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

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

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

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

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

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

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

– ГЛАВА 18 –

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

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

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

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

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

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

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

– ГЛАВА 19 –

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

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

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

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

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

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

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

– ГЛАВА 20 –

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

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

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

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

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

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

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

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

– ГЛАВА 21 –

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

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

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

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

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

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

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

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

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

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

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

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

– ГЛАВА 22 –

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

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

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

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

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

– ГЛАВА 23 –

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

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

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

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

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

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

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

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

– ГЛАВА 24 –

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

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

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

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

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

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

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

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

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

– ГЛАВА 25 –

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

Массивы NumPy. 469

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

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

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

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

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

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

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

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

– ГЛАВА 26 –

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

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

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

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

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

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

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

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

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

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

– ГЛАВА 27 –

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

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

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

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

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

Маркеры.. 525

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

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

Добавление легенды.. 530

Создание нескольких графиков в одном окне на разных осях. 532

Настройка осей графика. 535

Объектно-ориентированный подход к построению графиков. 540

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

– ГЛАВА 28 –

Построение с помощью библиотеки Matplotlib более сложных графиков. 547

Диаграммы рассеяния. 547

Графики в полярной системе координат. 550

Столбчатые диаграммы.. 553

Круговые диаграммы.. 558

Построение трехмерных графиков. 562

Линии уровня. 571

Отображение векторов. 575

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

– ГЛАВА 29 –

Знакомство с Pandas. 581

Установка библиотеки Pandas. 581

Чтение файлов в формате CSV.. 582

Создание экземпляров класса DataFrame. 589

Выбор элементов и фильтрация данных из DataFrame. 591

Обработка данных с помощью DataFrame. 598

Группировка. 607

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

– ГЛАВА 30 –

Библиотека SciPy: решение сложных научных и инженерных задач. 613

Физические константы и специальные математические функции. 613

Преобразование Фурье. 619

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

– ГЛАВА 31 –

Интерактивные среды IPython и JupyterLab. 642

IPython — более удобный REPL. 642

От IPython к JupyterLab. 648

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

Заключение ко всей книге. 661

Литература. 662

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

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

Новинка: “Windows глазами хакера”

Windows глазами хакера

Рассмотрена внутренняя архитектура Windows и Active Directory, подробно описаны доверенные отношения доменов и лесов, особенности работы Read-only Domain Controllers, уязвимости групповых политик и принципы управления привилегиями. Рассказывается о работе с Kerberos, инжекте и дампе, билетов, угоне пользовательских сессий, использовании WinAPI, COM и Named Pipes в пентесте, а также об обращении к нативному коду из C#. Описаны методы обхода средств защиты информации, включая анхукинг ntdll.dll, предотвращение подгрузки DLL, лазейки для исполнения стороннего кода, применение аппаратных точек останова, обход AMSI и написание раннеров для шелл-кода на .NET. Приводятся практические рекомендации по обфускации вызовов WinAPI и защите корпоративных сетей от атак.

Для пентестеров, реверс-инженеров, специалистов по информационной безопасности и защите данных

Вы узнаете

  • Пентест Active Directory
  • Поиск и эксплуатация уязвимостей в сетях Windows
  • Трюки с групповыми политиками и привилегиями
  • Kerberos и атаки на билеты
  • Практические методы кражи учетных данных
  • Инжекты и исполнение кода нестандартными способами
  • Современные методы обхода средств защиты информации
  • Практические техники пентеста Windows

Windows и Active Directory — сердце корпоративных сетей по всему миру. На этом фундаменте держатся домены, учетные записи сотрудников, базы данных и конфиденциальные ресурсы компаний. А значит, именно они всегда находятся в прицеле атакующих. Эта книга — практическое руководство для тех, кто хочет понять, как на самом деле взламывают Windows и AD: от простых методов обхода UAC и AMSI до эксплуатации доверенных отношений между доменами и написания собственных утилит с WinAPI. Здесь собраны конкретные техники и приемы, используемые пентестерами и настоящими хакерами — только практика. На страницах книги подробно разобрано, как происходит взлом корпоративных сетей, что можно выжать из архитектурных особенностей Windows, почему эта ОС содержит больше уязвимостей, чем кажется, и каким образом даже новые механизмы защиты превращаются в удобные ступеньки на пути к цели. Книга будет полезна пентестерам, реверс-инженерам, системным администраторам и специалистам по информационной безопасности, а также всем, кто хочет глубже понять внутреннее устройство Windows и научиться защищать свои сети от современных атак.
Валентин Холмогоров, ведущий редактор журнала «Хакер»

Жмайло Михаил Александрович

Жмайло Михаил Александрович — исследователь безопасности систем, пентестер, автор статей в журнале «Хакер», докладчик на многочисленных конференциях по информационной безопасности, создатель более десяти инструментов для атак на Windows.

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

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

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

От редакции………………………………………………………………………………………………………………………………… 10

Часть I. Пентест Active Directory…………………………………………… 11

Глава 1. Как работают атаки на доверенные отношения доменов и лесов AD       13

Разведка………………………………………………………………………………………………………………………………………. 14

Леса……………………………………………………………………………………………………………………………………… 14

Домены………………………………………………………………………………………………………………………………… 15

Trust Keys……………………………………………………………………………………………………………………………………. 17

Домены………………………………………………………………………………………………………………………………… 17

Леса……………………………………………………………………………………………………………………………………… 19

Выдаем себя за контроллер домена…………………………………………………………………………………. 20

Неограниченное делегирование……………………………………………………………………………………….. 20

Между доменами………………………………………………………………………………………………………. 21

Между лесами…………………………………………………………………………………………………………… 21

Ограниченное делегирование…………………………………………………………………………………………… 22

PAM Trust……………………………………………………………………………………………………………………………………. 23

Обнаружение………………………………………………………………………………………………………………………. 23

Проверка, не в бастионном лесе ли мы…………………………………………………………………………….. 24

Проверяем, не управляется ли текущий лес каким-то другим по PAM Trust………………… 25

Дополнительные проверки и новые угрозы…………………………………………………………………….. 26

Эксплуатация…………………………………………………………………………………………………………………………….. 27

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

Глава 2. Эксплуатируем небезопасные групповые политики…………………. 29

Структура…………………………………………………………………………………………………………………………………… 29

Обнаружение……………………………………………………………………………………………………………………………… 30

Эксплуатация…………………………………………………………………………………………………………………………….. 35

mmc……………………………………………………………………………………………………………………………………… 35

Файл .ini………………………………………………………………………………………………………………………………. 36

Создание GPO…………………………………………………………………………………………………………………….. 37

Перемещение через GPO……………………………………………………………………………………………………. 38

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

Глава 3. Пентестим Read-only Domain Controllers…………………………………… 40

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

Определения и особенности……………………………………………………………………………………………… 40

Атрибуты…………………………………………………………………………………………………………………………….. 42

managedBy………………………………………………………………………………………………………………… 42

msDS-RevealOnDemandGroup, msDS-NeverRevealGroup………………………………………. 42

msDS-AuthenticatedToAccountList…………………………………………………………………………… 43

msDS-Revealed*………………………………………………………………………………………………………… 43

Аутентификация пользователей……………………………………………………………………………………….. 43

Поиск RODC……………………………………………………………………………………………………………………………….. 44

Получение кешированных паролей с RODC…………………………………………………………………………… 46

DSRM………………………………………………………………………………………………………………………………………….. 48

Особенности работы Kerberos с RODC……………………………………………………………………………………. 48

Key List………………………………………………………………………………………………………………………………………… 50

Контроль над объектом RODC…………………………………………………………………………………………………. 52

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

Часть II. Системное программирование для хакеров…….. 55

Глава 4. Изучаем возможности WinAPI для пентестера………………………….. 57

SID и токены……………………………………………………………………………………………………………………………….. 57

Токен и процесс………………………………………………………………………………………………………………………….. 58

Приступаем к работе…………………………………………………………………………………………………………………. 59

Получаем токен………………………………………………………………………………………………………………….. 59

Проверка наличия привилегии в токене…………………………………………………………………………… 60

Изменение информации токена…………………………………………………………………………………………. 61

Выполнение кода с использованием токена……………………………………………………………………………. 63

Создание процесса…………………………………………………………………………………………………………….. 63

Применение к потоку…………………………………………………………………………………………………………. 65

Заимствование прав подключенного пользователя……………………………………………………………….. 65

Без установления соединения…………………………………………………………………………………………… 65

Именованные каналы………………………………………………………………………………………………………… 66

Сокеты или другой механизм взаимодействия……………………………………………………………………….. 67

Начало работы…………………………………………………………………………………………………………………… 67

Роль клиента……………………………………………………………………………………………………………………….. 69

Роль сервера……………………………………………………………………………………………………………………….. 73

Использование полного контекста…………………………………………………………………………………… 75

Имперсонация…………………………………………………………………………………………………………………….. 75

RevertSecurityContext()……………………………………………………………………………………………… 76

Получение токена из контекста……………………………………………………………………………….. 76

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

Глава 5. Получаем билеты TGT методом GIUDA……………………………………. 77

Logon Session………………………………………………………………………………………………………………………………. 77

Как LSA запрашивает билеты Kerberos…………………………………………………………………………………… 84

Крадем билет……………………………………………………………………………………………………………………………… 85

TGT — это TGS…………………………………………………………………………………………………………………………… 91

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

Глава 6. Управляем привилегиями в Windows……………………………………….. 93

Добавляем привилегии аккаунту……………………………………………………………………………………………… 93

Запускаем процесс с привилегией………………………………………………………………………………………….. 102

Удаляем привилегию из аккаунта………………………………………………………………………………………….. 105

Ищем объекты с привилегией…………………………………………………………………………………………………. 107

Смотрим привилегии объекта…………………………………………………………………………………………………. 110

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

Глава 7. Поставщик небезопасности. Как Windows раскрывает
пароль пользователя…………………………………………………………………………….. 112

Компоненты безопасности……………………………………………………………………………………………………… 112

Security Package………………………………………………………………………………………………………………… 113

SSP/AP (или же просто AP)………………………………………………………………………………………………. 113

Security Providers………………………………………………………………………………………………………………. 114

Credential Providers…………………………………………………………………………………………………………… 115

Password Filters………………………………………………………………………………………………………………….. 115

Как происходит вход пользователя в систему………………………………………………………………. 115

Инициализация LSA…………………………………………………………………………………………………………. 119

Эксплуатация…………………………………………………………………………………………………………………………… 123

Как дебажить?………………………………………………………………………………………………………………….. 123

Перехват пароля с помощью внедрения Security Package……………………………………………. 125

Требования………………………………………………………………………………………………………………. 125

Загрузка в систему………………………………………………………………………………………………….. 125

Проверка………………………………………………………………………………………………………………….. 126

Перехват пароля……………………………………………………………………………………………………… 126

Перехват пароля с помощью внедрения Password Filter……………………………………………….. 130

Требования………………………………………………………………………………………………………………. 130

Загрузка в систему………………………………………………………………………………………………….. 130

Перехват пароля……………………………………………………………………………………………………… 130

Запрещаем пользователям менять пароль……………………………………………………………. 132

Перехват пароля с помощью диспетчера учетных данных…………………………………………. 133

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

Добавление в систему…………………………………………………………………………………………….. 133

Перехват пароля……………………………………………………………………………………………………… 135

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

Глава 8. Долой Mimikatz! Инжектим тикеты своими руками……………….. 139

Получение тикета…………………………………………………………………………………………………………………….. 139

Подключение к LSA…………………………………………………………………………………………………………………. 141

Обнаружение AP………………………………………………………………………………………………………………………. 143

Внедрение билета……………………………………………………………………………………………………………………. 144

Проверка…………………………………………………………………………………………………………………………………… 146

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

Глава 9. Как дампить тикеты Kerberos на C++……………………………………. 149

Kerberos AP……………………………………………………………………………………………………………………………….. 149

Начало работы………………………………………………………………………………………………………………………… 150

Особенности дампа…………………………………………………………………………………………………………………. 155

Подключение к LSA…………………………………………………………………………………………………………………. 156

Получение ID……………………………………………………………………………………………………………………………. 161

Перечисляем все LUID…………………………………………………………………………………………………………….. 162

Изучение кеша………………………………………………………………………………………………………………………….. 166

Дамп тикета……………………………………………………………………………………………………………………………… 171

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

Глава 10. Как злоупотреблять хендлами в Windows……………………………… 180

Интересные хендлы…………………………………………………………………………………………………………………. 180

Изучение хендлов процесса……………………………………………………………………………………………………. 181

Handle Duplicating……………………………………………………………………………………………………………………. 181

Leaked Handle………………………………………………………………………………………………………………………….. 192

Handle Hijacking………………………………………………………………………………………………………………………. 193

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

Глава 11. Достаем учетные данные Windows, не трогая LSASS…………….. 205

Реквизиты, контекст и блобы………………………………………………………………………………………………….. 206

Известные атаки………………………………………………………………………………………………………………………. 207

Внутренний монолог……………………………………………………………………………………………………………….. 209

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

Глава 12. Ищем способы обращения к нативному коду из C#……………… 218

Platform Invoke………………………………………………………………………………………………………………………… 218

Dynamic Invoke………………………………………………………………………………………………………………………… 221

Parasite Invoke………………………………………………………………………………………………………………………….. 227

Dynamic PInvoke……………………………………………………………………………………………………………………… 230

Hash Invoke………………………………………………………………………………………………………………………………. 234

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

Глава 13. Как работает угон пользовательских сессий в Windows………… 237

Поиск сессий пользователей…………………………………………………………………………………………………… 237

WinAPI………………………………………………………………………………………………………………………………. 238

Реестр………………………………………………………………………………………………………………………………… 241

Через SCCM………………………………………………………………………………………………………………………. 243

Через RDP-сессии……………………………………………………………………………………………………………… 244

Логи…………………………………………………………………………………………………………………………………… 244

Процессы…………………………………………………………………………………………………………………………… 248

Кража сессий……………………………………………………………………………………………………………………………. 248

Воруем TGS………………………………………………………………………………………………………………………. 248

Манипуляции с токенами………………………………………………………………………………………………… 250

RemotePotato0………………………………………………………………………………………………………………….. 251

Запрос чужих сертификатов…………………………………………………………………………………………… 251

SeMishaPrivilege………………………………………………………………………………………………………………… 252

Leaked Wallpaper……………………………………………………………………………………………………………… 253

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

Глава 14. Используем Named Pipes при атаке на Windows…………………….. 256

Что такое Pipe…………………………………………………………………………………………………………………………… 256

Пример клиента и сервера………………………………………………………………………………………………………. 258

Изучение доступных пайпов…………………………………………………………………………………………………… 259

Process Hacker…………………………………………………………………………………………………………………… 259

C++…………………………………………………………………………………………………………………………………….. 260

PowerShell………………………………………………………………………………………………………………………….. 262

IO Ninja……………………………………………………………………………………………………………………………… 263

PipeViewer………………………………………………………………………………………………………………………….. 263

Имперсонация клиентов………………………………………………………………………………………………………….. 263

Чейн с SeImpersonate……………………………………………………………………………………………………………….. 268

Скрытое чтение данных………………………………………………………………………………………………………….. 271

Гонка пайпов……………………………………………………………………………………………………………………………. 272

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

Глава 15. Исследуем обход UAC на примере Elevation Moniker…………….. 279

Моникеры…………………………………………………………………………………………………………………………………. 279

Подвиды моникеров…………………………………………………………………………………………………………………. 281

Регистрация Elevation Moniker……………………………………………………………………………………………….. 281

Использование Elevation Moniker…………………………………………………………………………………………… 286

Примеры COM-объектов…………………………………………………………………………………………………………. 287

ICMLuaUtil……………………………………………………………………………………………………………………….. 287

IFileOperation…………………………………………………………………………………………………………………….. 289

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

Глава 16. Как работает кража сессии через механизм COM…………………. 291

Logon Sessions…………………………………………………………………………………………………………………………… 291

Session Moniker…………………………………………………………………………………………………………………………. 295

Запуск процесса в чужой сессии……………………………………………………………………………………………. 301

Утечка хеша пароля при смене обоев……………………………………………………………………………………. 302

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

Часть III. Способы обхода средств защиты информации 305

Глава 17. Познаем анхукинг ntdll.dll…………………………………………………….. 307

Снятие хука через чтение библиотеки с диска……………………………………………………………………… 308

Снятие хука через KnownDlls………………………………………………………………………………………………….. 321

Снятие хука через приостановленный процесс……………………………………………………………………. 329

Снятие хука через подгрузку ntdll.dll с удаленного веб-сервера…………………………………………. 335

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

Глава 18. Изучаем методы предотвращения подгрузки DLL………………… 346

UpdateProcThreadAttribute………………………………………………………………………………………………………. 346

SetProcessMitigationPolicy………………………………………………………………………………………………………… 353

Включение ACG……………………………………………………………………………………………………………………….. 355

Запуск процесса с DEBUG………………………………………………………………………………………………………. 359

Хук на NtCreateSection…………………………………………………………………………………………………………….. 362

Простой вариант………………………………………………………………………………………………………………. 362

Модифицированный вариант…………………………………………………………………………………………. 363

WMI…………………………………………………………………………………………………………………………………………… 364

DLL Notification Callbacks………………………………………………………………………………………………………. 367

ETW (Kernel Provider)……………………………………………………………………………………………………………….. 370

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

Глава 19. Ищем в Windows лазейки для исполнения стороннего кода….. 374

DLL Redirection………………………………………………………………………………………………………………………… 375

Для обычных исполняемых файлов……………………………………………………………………………….. 375

Сборки .NET……………………………………………………………………………………………………………………… 381

Image Path Name Spoofing………………………………………………………………………………………………………. 383

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

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

WinSxS………………………………………………………………………………………………………………………………………. 387

svchost.exe………………………………………………………………………………………………………………………………… 391

LSASS Driver……………………………………………………………………………………………………………………………… 391

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

Глава 20. Используем хардверные брейк-пойнты в пентестерских целях 393

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

Установка hardware breakpoint………………………………………………………………………………………………. 402

Обход AMSI……………………………………………………………………………………………………………………………… 406

Извлечение номеров сисколов………………………………………………………………………………………………… 408

Анхукинг…………………………………………………………………………………………………………………………………… 412

Пишем кастомный GetThreadContext()………………………………………………………………………………….. 413

Ставим хуки……………………………………………………………………………………………………………………………… 416

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

Глава 21. Изучаем новый способ обхода AMSI в Windows……………………. 417

Становимся дебаггером…………………………………………………………………………………………………………… 417

Избегаем использования функции DebugActiveProcess………………………………………………………… 423

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

Глава 22. Замена для WinAPI. Пишем раннер для шелл-кода
на чистом .NET…………………………………………………………………………………….. 425

Синхронизация через Sleep…………………………………………………………………………………………………….. 427

Поток без CreateThread()…………………………………………………………………………………………………………. 429

Копируем память ручками……………………………………………………………………………………………………… 433

Выделяем исполняемую память без WinAPI…………………………………………………………………………. 436

Делегаты…………………………………………………………………………………………………………………………… 436

EmitAlloc()…………………………………………………………………………………………………………………………. 437

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

Глава 23. Обфусцируем вызовы WinAPI новыми способами………………… 441

Проксирование вызовов………………………………………………………………………………………………………….. 442

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

Обнаружение прокси-функций……………………………………………………………………………………….. 443

Таблица экспортов/импортов………………………………………………………………………………… 443

Бинарный анализ……………………………………………………………………………………………………. 443

Пример с DphCommitMemoryFromPageHeap……………………………………………………………….. 450

Через RPC………………………………………………………………………………………………………………………….. 453

Используем альтернативные функции…………………………………………………………………………………… 455

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

Замена CRT………………………………………………………………………………………………………………………. 455

Через ссылки на структуры Windows……………………………………………………………………………… 456

Изучаем COM…………………………………………………………………………………………………………………… 460

Замена ReadProcessMemory()…………………………………………………………………………………………. 460

Замена WriteProcessMemory()…………………………………………………………………………………………. 461

Где искать альтернативы………………………………………………………………………………………………… 461

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

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

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

Встречайте: “Программирование с помощью искусственного интеллекта”

Программирование с помощью искусственного интеллекта

Книга посвящена практике использования инструментов искусственного интеллекта  для всех этапов создания кода: от разработки требований и планирования до проектирования, написания, отладки и тестирования. Предложена методология модульного программирования, которая эффективно сочетается с подходом генерации кода с применением ИИ. Рассмотрены  основные возможности и сценарии использования инструментов ИИ для разработки, оценены плюсы и минусы популярных систем. Показаны перспективы применения универсальных языковых моделей (LLM), таких как ChatGPT, Gemini, Claude и других, для решения задач программирования. Также рассмотрено применение широкого спектра специализированных систем (GitHub Copilot, Tabnine, Cursor, Amazon CodeWhisperer). Освещены вопросы инженерии промптов, автоматизации рутинных задач, таких как создание регулярных выражений, применения низкокодового и бескодового программирования и др.

Для широкого круга разработчиков

 

Примеры кода можно скачать тут: https://github.com/ttaulli/AI-Assisted-Programming-Book

Получите практические советы, как использовать инструменты искусственного интеллекта для всех этапов создания кода: от разработки требований и планирования до проектирования, написания, отладки и тестирования.  Начинающие и опытные разработчики узнают, как применять широкий спектр инструментов ИИ— от универсальных языковых моделей (ChatGPT, Gemini, Claude) до специализированных систем (GitHub Copilot, Tabnine, Cursor, Amazon CodeWhisperer).

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

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

В этой книге:

  • Основные возможности ИИ-инструментов для разработки
  • Плюсы, минусы и сценарии использования популярных систем, включая GitHub Copilot
  • Применение универсальных языковых моделей (LLM), таких как ChatGPT, Gemini, Claude и других, для решения задач программирования
  • Использование ИИ-инструментов в жизненном цикле разработки ПО: от разработки требований до тестирования
  • Инженерия промптов для разработки
  • Автоматизация рутинных задач, таких как создание регулярных выражений, с помощью ИИ
  • Низкокодовые и бескодовые инструменты на основе ИИ
Tom Taulli

Том Таулли занимается разработкой программного обеспечения с 1980-х годов. Еще в колледже основал свою первую компанию, которая сосредоточилась на разработке систем электронного обучения. Ведет авторские колонки для популярных онлайн-изданий, таких как BusinessWeek.com, TechWeb.com и Bloomberg.com. Автор статей об искусственном интеллекте для Forbes.com и является консультантом различных компаний в этой сфере. Ведет  веб-сайт Taulli.com.

Книгу “Программирование с помощью искусственного интеллекта” можно купить в нашем интенет-магазине.

Высокая оценка книги
«Программирование с помощью искусственного интеллекта». 9

Вступительное слово. 11

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

О чем эта книга. 14

В чем отличие этой книги. 15

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

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

Примеры использования кода. 16

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

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

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

Глава 1. Новый мир для разработчиков. 19

Эволюция и революция. 20

Генеративный искусственный интеллект. 23

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

Минимизация поиска. 24

Ваш консультант. 26

Интеграция с IDE.. 27

Рефлексия вашей кодовой базы.. 28

Целостность кода. 29

Генератор документации на платформе искусственного интеллекта. 30

Модернизация. 30

Недостатки. 34

Галлюцинации. 34

Интеллектуальная собственность. 35

Конфиденциальность. 36

Безопасность. 36

Данные для обучения. 37

Предвзятость. 38

Новый путь для разработчиков. 38

Карьера. 39

Разработчик 10x?. 40

Профессиональные навыки разработчика. 40

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

Глава 2. Как работает технология программирования с использованием искусственного интеллекта  43

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

Подбор кода и завершение с учетом контекста в сопоставлении с интеллектуальным завершением кода  44

Компиляторы по сравнению с инструментами программирования на основе искусственного интеллекта  45

Уровни возможностей. 47

Генеративный искусственный интеллект и большие языковые модели (LLM) 49

Эволюция. 49

Модель трансформера. 51

OpenAI Playground. 54

Токены.. 55

Использование платформы.. 56

Оценка больших языковых моделей. 60

Типы больших языковых моделей. 63

Выбор ИИ-инструментов программирования. 66

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

Глава 3. Оперативное проектирование. 69

Наука и искусство. 70

Проблемы.. 70

Промпт. 71

Контекст. 72

Инструкции. 72

Суммаризация. 73

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

Рекомендации. 75

Локализация. 75

Ввод содержимого. 77

Формат. 77

Передовой опыт. 79

Будьте конкретны.. 79

Сокращения и технические термины.. 80

Техники обучения с примерами и без. 80

Ключевые слова. 81

Методика промптов по цепочке размышлений (CoT) 82

Наводящие вопросы.. 83

Промпт на примеры и аналогии. 83

Снижение галлюцинаций. 84

Безопасность и конфиденциальность. 85

Автономные агенты искусственного интеллекта. 86

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

Глава 4. Github Copilot 91

GitHub Copilot 91

Цены и версии. 92

Пример использования: программирование аппаратных средств. 93

Пример использования: Shopify. 94

Пример использования: Accenture. 96

Безопасность. 96

Приступая к работе. 97

Среда Codespaces и Visual Studio Code. 98

Рекомендации. 99

Комментарии. 102

Чат. 102

Внутренний чат. 107

Открытые вкладки. 108

Интерфейс командной строки. 109

Партнерская программа Copilot 110

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

Глава 5. Остальные инструменты программирования на основе
искусственного интеллекта. 113

CodeWhisperer от Amazon. 113

Duet AI от Google для разработчиков. 115

Tabnine. 117

Replit 118

CodeGPT.. 121

Cody  122

CodeWP. 124

Warp  125

Bito AI. 127

Cursor 128

Code Llama. 130

Остальные модели с открытым исходным кодом.. 131

StableCode. 131

AlphaCode. 132

PolyCoder 132

CodeT5. 132

Компании, производящие корпоративное программное обеспечение. 133

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

Глава 6. ChatGPT и другие большие языковые модели общего назначения. 135

ChatGPT.. 135

GPT-4. 136

Навигация по ChatGPT.. 137

Мобильное приложение. 140

Пользовательские запросы.. 141

Просмотр с помощью Bing. 141

Утомительные задачи. 145

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

Стартовый код. 147

GitHub README.. 148

Кросс-браузерная совместимость. 149

Команды Bash. 150

GitHub Actions. 150

Плагины.. 151

Плагин Codecademy. 152

Плагин AskYourDatabase. 153

Плагин Recombinant AI. 154

GPTs  154

Gemini 156

Приложения. 158

Программирование в Gemini 159

Claude. 161

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

Глава 7. Идеи, планирование и требования. 165

Мозговой штурм.. 165

Исследование рынка. 167

Тенденции развития рынка. 170

Общий адресный рынок. 171

Конкуренция. 172

Требования. 174

Документ с требованиями к продукту. 175

Спецификация требований к программному обеспечению.. 176

Интервью.. 177

Белая доска. 178

Стиль. 180

Подходы к планированию проекта. 181

Разработка через тестирование. 183

Разработка веб-дизайна. 185

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

Глава 8. Программирование. 189

Что в реальности?. 189

Мотивы, помогающие принять решение. 191

Обучение. 191

Комментарии. 193

Модульное программирование. 194

Начало работы над проектом.. 195

Автозаполнение. 196

Рефакторинг. 198

Ninja Code. 198

Метод извлечения. 199

Разделение условий. 200

Переименование. 200

Мертвый код. 201

Функции. 202

Объектно-ориентированное программирование. 204

Фреймворки и библиотеки. 205

Данные. 206

Разработка фронтенда. 208

Каскадные таблицы стилей CSS. 209

Создание графики. 210

Инструменты на основе искусственного интеллекта. 211

API-интерфейсы.. 213

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

Глава 9. Отладка, тестирование и развертывание. 215

Отладка. 215

Документация. 216

Код-ревью.. 218

Модульные тесты.. 219

Запросы на извлечение. 222

Развертывание. 224

Обратная связь с пользователями. 225

Запуск. 227

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

Глава 10. Выводы.. 229

Интенсивный процесс обучения. 229

Основные преимущества. 229

Но есть и недостатки. 230

Оперативное проектирование —  это не только искусство, но и наука. 231

За гранью программирования. 232

Искусственный интеллект не заменит вас на работе. 232

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

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

Об авторе. 238

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

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

Вышла книга: “Инжиниринг платформ: техническое и управленческое руководство”

Инжиниринг платформ

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

Для специалистов DevOps, системных администраторов, руководителей команд

Инжиниринг платформ — это командная игра. Перед вами правила игры.

Келси Хайтауэр, заслуженный инженер Google, соавтор книги «Kubernetes: Up & Running» (O’Reilly)

Техническое и управленческое руководство

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

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

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

Это практическое руководство подробно рассказывает об инжиниринге платформ – новом направлении в индустрии DevOps —  и помогает разработчикам, менеджерам и руководителям внедрить в организации те изменения, которые позволят развивать продукт как платформу. Вы узнаете, что входит и не входит в понятие «инжиниринг платформ» и почему эта парадигма становится необходимой.

Книга поможет:

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

Иэн Ноуленд — ветеран индустрии программного обеспечения с 25-летним стажем, занимавший пост старшего вице-президента в компании Datadog. С 2008 по 2016 год работал в компании AWS, где руководил проектами Amazon EMR и EC2 Nitro. В настоящее время является соучредителем стартапа.

 

 

Camille Fournier

Фурнье Камиль занимала должность руководителя в компаниях от зарождающихся стартапов до корпораций из рейтинга Fortune 50. Была в числе основателей Комитета по техническому надзору CNCF, в настоящее время входит в совет директоров журнала ACM Queue. Автор книги «The Manager’s Path» издательства O’Reilly.

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

Отзывы на книгу “Инжиниринг платформ”. 13

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

Введение. 17

От Камиль Фурнье. 17

Для кого предназначена эта книга. 18

Как читать эту книгу. 19

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

Наши контакты.. 20

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

От Камиль. 21

От Иэна. 21

От нас обоих. 22

ЧАСТЬ I. Что такое инжиниринг платформ и для чего он нужен. 23

Глава 1. Почему инжиниринг платформ приобретает такую важность. 25

Определение платформы и другие важные термины.. 26

Наше общее болото. 27

Как мы увязли в этом болоте. 30

Изменение № 1. Расширение возможностей выбора. 30

Изменение № 2. Более высокие операционные потребности. 33

Результат: вы тонете в болоте. 35

Как разработка платформ помогает выбраться из болота. 36

Ограничение использования примитивов при минимизации накладных расходов  36

Сокращение количества клея для каждого приложения. 37

Централизация затрат на миграцию.. 39

Предоставление разработчикам приложений возможности управлять тем,
что они разрабатывают. 40

Позвольте командам сосредоточиться на создании платформ.. 41

Резюме. 44

Глава 2. Основы инжиниринга платформ.. 45

Кураторский подход к продукту. 46

Разработка абстракций на основе программного обеспечения. 48

Основные абстракции: платформенный сервис и его API-интерфейсы.. 49

“Толстые” клиенты.. 50

Настройки OSS. 51

Интеграция реестров метаданных. 52

Обслуживание широкого круга разработчиков приложений. 54

Платформа в качестве фундамента. 56

Ответственность за всю платформу. 57

Поддержка платформы.. 58

Операционная дисциплина. 59

Резюме. 61

ЧАСТЬ II. Практика инжиниринга платформ.. 63

Глава 3. Как и когда начинать. 69

Содействие сотрудничеству при создании платформ на ранних стадиях. 69

Создание платформенных команд, которые заменят сотрудничество. 76

Соответствуют ли преимущества централизации владения понесенным затратам?  77

Осознайте, что коллективная динамика исчезла. 78

Сосредоточьтесь на решении проблем, а не на новых технологиях или архитектуре  79

Остерегайтесь новых инженеров, приходящих из гораздо более крупных компаний  80

Не спешите нанимать менеджеров по продуктам (и избегайте менеджеров проектов) 80

Дополнительные проблемы для платформ интеграции и совместного использования сервисов  81

Трансформация традиционной инфраструктуры организации. 84

Вся ваша инженерная культура должна измениться. 84

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

Осознайте, что вы не можете просто нанять менеджеров по продуктам,
чтобы покончить с этим делом.. 86

Измените способ поддержки своих продуктов. 86

Обновите свой процесс собеседования. 86

Обновите свои системы признания и вознаграждения. 87

Не нужно нанимать слишком много менеджеров проектов. 87

Согласитесь с тем, что ваша команда будет тратить больше времени
на общение с клиентами и меньше — на написание кода. 88

Проведите необходимую реструктуризацию.. 88

И пусть это будет весело! 89

Резюме. 89

Глава 4. Создание отличных платформенных команд. 91

Риски, связанные с командами, работающими с платформами. 92

Слишком много внимания уделяется системам.. 92

Слишком много внимания уделяется разработке. 94

Различные роли платформенных инженеров. 95

Инженеры-программисты.. 96

Системные инженеры.. 98

Инженеры по надежности. 99

Специалисты по системам.. 100

Подбор и утверждение инженеров на все должности. 101

Разрешите специфические названия должностей. 103

Избегайте создания новой матрицы уровней инженеров-программистов. 103

Используйте, по возможности, одноуровневую матрицу для системных
ролей. 104

При необходимости создайте новый процесс собеседования при найме инженеров-программистов  105

Для разных системных ролей интервью не должно сильно меняться. 107

Интервью для выявления эмпатии к клиентам.. 108

Из кого получаются инженеры-менеджеры по разработке отличных
платформ?. 109

Опыт работы с платформами. 109

Опыт работы в крупных долгосрочных проектах. 110

Внимание к деталям.. 111

Другие роли в команде разработчиков платформы.. 111

Менеджеры по продуктам.. 111

Владельцы продуктов. 113

Менеджеры проектов / технические менеджеры программ.. 113

Девелопер-адвокаты, технические писатели и инженеры службы поддержки. 114

Формирование культуры команды разработчиков платформы.. 115

Разделение ответственности между командой разработчиков
и командой SRE. 115

Сильные и слабые стороны команды разработчиков. 115

Объединение команд и добавление управления продуктами. 116

Внедрение культуры разработки платформ.. 117

Резюме. 118

Глава 5. Платформа как продукт. 119

Культура продукта, ориентированная на потребителя. 120

Характеристики внутренних клиентов. 121

Взаимодействие с внутренними клиентами. 123

Эмпатия к клиентам.. 125

Как избежать ловушки магазина функций, чтобы обеспечить более широкое обслуживание клиентов  128

Поиск новых продуктов и анализ рынка. 130

Определение потенциальных платформенных продуктов. 131

Развитие существующих предложений: сглаживание граней или переосмысление проблемы   134

Маркетинговые исследования: обоснование новых инвестиций. 136

Метрики продукта. 141

Успешная реализация продукта: составление дорожной карты.. 146

Видение. Долгосрочное. 147

Стратегия. Среднесрочная перспектива. 147

Цели и метрики. Планы на год. 148

Контрольные точки. Ежеквартально. 148

Спецификация функций. 149

Практика делает всё более совершенным.. 149

Типы сбоев в разработке продукта. 151

Недооценка стоимости миграции. 152

Завышение бюджета на изменения в работе пользователей. 152

Переоценка новых функций при низкой стабильности. 153

Слишком много менеджеров по продуктам для инженерной команды.. 154

Ситуация, когда менеджеры по продуктам выполняют работу,
которую должен делать инженерный менеджмент. 154

Резюме. 155

Глава 6. Эксплуатация платформ.. 157

Практика работы по вызову. 158

Почему важно обслуживание по вызову в режиме 24´7. 159

Зачем объединять DevOps?. 159

Переход к устойчивой нагрузке по вызовам.. 161

Методы поддержки. 164

Почему инженеры-разработчики платформы должны выполнять работу
по поддержке. 165

Этап 1. Формализуйте уровни поддержки. 166

Этап 2. Отделите некритическую поддержку от поддержки по вызову. 168

Этап 3. Наймите специалиста по поддержке. 169

Этап 4. Масштабирование с помощью организации технической
поддержки. 171

Практика оперативной обратной связи. 173

SLO и SLA необходимы. Бюджеты ошибок не обязательны.. 174

Управление изменениями. 176

Синтетический мониторинг. 178

Операционные обзоры.. 180

Резюме. 182

Глава 7. Планирование и поставка. 183

Планирование долгосрочных проектов. 184

Уточнение целей и требований в документе-предложении. 184

Переход от предложения к плану действий. 186

Не затягивайте работу. 188

Планирование дорожной карты “снизу вверх”. 192

Работа по принципу “Не выключай свет” (KTLO) 193

Приказы.. 194

Усовершенствования системы.. 195

Повышение эффективности и производительности. 197

Повышение безопасности и соответствия требованиям.. 199

Сводим всё это воедино. 200

Сообщайте о победах и трудностях раз в две недели. 204

Основы.. 205

Зачем? В чем ценность?. 205

Что? Cтруктурирование побед и трудностей. 206

Не забывайте о проблемах! 207

Научите свою команду писать о победах и трудностях. 208

Резюме. 210

Глава 8. Реорганизация платформ.. 213

Почему преобразование архитектуры предпочтительнее, чем создание
версии 2. 214

Разное инженерное мышление. 216

Архитектура определяет требования к типу мышления. 217

Почему сложно создавать платформы версии 2 и предпочтительнее
перестроить архитектуру. 219

Решение проблем безопасности с помощью архитектуры.. 222

Ограничения реорганизации архитектуры.. 228

Совместимость. 228

Тестирование. 228

Более низкие требования к средам.. 229

Транши, медленное внедрение и отставание в версии. 230

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

Шаг 1. Масштабно продумайте конечные цели реорганизации
архитектуры.. 232

Шаг 2. Учитывайте затраты на миграцию.. 235

Шаг 3. Определите основные достижения за следующие 12 месяцев. 236

Шаг 4. Заручитесь поддержкой руководства и будьте готовы ждать. 237

Резюме. 238

Глава 9. Миграция и закат платформ.. 241

Антипаттерны миграции. 242

Инженерия упрощенной миграции. 243

Используйте абстракции продукта, которые сводят к минимуму
количество “клея” и ограничивают вариативность. 244

Создавайте архитектуру, предусматривающую прозрачную миграцию.. 245

Отслеживание метаданных об использовании. 247

Разрабатывайте автоматизацию, чтобы избежать использования
буферов обмена. 249

Документооборот для плавной миграции. 250

Координация плавных миграций. 252

Масштабируйте, ограничивайте и определяйте приоритетность запланированных изменений  252

Предоставляйте информацию заблаговременно и публично. 254

Пройдите последние 20 % пути. 255

Продуманное использование приказов. 256

Закат платформ.. 258

Принятие решения о прекращении использования (закате) платформы.. 258

Координация заката. 261

Не бойтесь сворачивать работу, когда в этом есть смысл. 262

Резюме. 262

Глава 10. Управление взаимоотношениями с заинтересованными сторонами  265

Составление карты заинтересованных сторон: матрица “власть-интерес”. 267

Общение с надлежащей прозрачностью.. 271

Остерегайтесь чрезмерного распространения деталей. 271

Разумно используйте регулярное общение в формате 1:1. 273

Следите за ожиданиями и обязательствами. 274

Расширяйте масштаб с помощью совместных совещаний и консультативных советов по работе с клиентами  275

Увеличивайте объем коммуникации в сложных ситуациях. 275

Поиск приемлемых компромиссов. 276

Четко представляйте последствия для бизнеса. 277

Иногда говорите “Да, но с компромиссами”. 278

Говорите “Нет”, не разрушая отношений. 279

Компромисс на теневых платформах. 282

Финансовые проблемы: управление затратами и бюджетом.. 285

Шаг 1. Определите, кто получит выгоду завтра. 286

Шаг 2. Распределите работу по группам (но не поручайте отдельным исполнителям) 287

Шаг 3. Предложите, что сократить, и выскажите твердое мнение о том,
что оставить. 288

Резюме. 289

ЧАСТЬ III. Как выглядит успех?. 291

Глава 11. Ваши платформы согласованы.. 293

Соответствие цели. 295

Приведение команд в соответствие с поставленной целью с помощью правильного подбора сотрудников  296

Приведение культуры в соответствие с целями и общепринятыми
методами работы.. 297

Приведение культуры в соответствие с целями при помощи
сотрудничества команд. 297

Согласование стратегии продукта. 298

Развивайте кросс-платформенное мышление с помощью независимого управления продуктами  298

Поддерживайте кросс-платформенную архитектуру с помощью независимых индивидуальных контрибьюторов. 299

Ищите обратную связь в комментариях к опросам клиентов платформы.. 300

Разумно устраняйте несогласованность с помощью реструктуризации. 301

Согласование планов. 302

Согласовывайте только крупные проекты, а не каждую деталь. 302

Будьте честны в борьбе с несогласованностью.. 303

Окончательное согласование зависит от принципиального лидерства. 304

Объединение усилий: приведение организации к согласованию.. 304

Резюме. 307

Глава 12. Вашим платформам доверяют. 309

Доверие к стилю вашей работы.. 311

Укрепляйте доверие, расширяя возможности опытных руководителей. 312

Оптимизируйте рост доверия, упорядочивая варианты использования. 313

Верьте в свои крупные инвестиции. 314

Заручитесь поддержкой технических заинтересованных сторон,
чтобы получить доверие к перестройке архитектуры.. 315

Для завоевания доверия к новым продуктам ищите спонсорскую
поддержку со стороны руководства. 315

Поддерживайте старые системы, чтобы сохранить доверие. 316

Завоевание доверия требует гибкости в отношении того, что является “правильным”  316

Доверие для определения приоритетности поставки. 317

Создайте культуру скорости поставки. 318

Расставляйте приоритеты в проектах, чтобы высвободить потенциал команды   319

Оспаривайте предположения о сфере применения продукта. 320

Объединяем всё воедино: случай с перегруженной платформой. 322

Резюме. 324

Глава 13. Ваши платформы справляются со сложностями. 327

Управление случайной сложностью, связанной с координацией
действий людей. 330

Управление сложностью, связанной с теневыми платформами. 332

Управление сложностями, возникающими при неконтролируемом росте. 335

Управление сложностью с помощью поиска нового продукта. 337

Объединение усилий: баланс между внутренней и внешней сложностями. 338

Неудачи при использовании OSS. 339

Безуспешная попытка изменить правила игры.. 339

Теневые платформы вынуждают к перезагрузке. 340

Запуск после перезагрузки. 341

Резюме. 342

Глава 14. Ваши платформы любят. 343

Любовь работает. 346

Любовь может выглядеть как хитрость. 347

Любовь может быть очевидной. 349

Соединяем всё вместе: любовь делает ваших пользователей классными. 350

В заключение. Что такое любовь? Детка, не делай мне больно. 352

Заключительные замечания. 353

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

Об авторах. 366

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

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

Новинка: “Современный C#. Разработка настольных, облачных, мобильных и веб-приложений”

Современный C#. Разработка настольных, облачных, мобильных и веб-приложений

Это новое издание фундаментальной книги Иэна Гриффитса по языку C# и платформе .NET на примере версий C# 12 и .NET 8. Книга  много лет остается настольными для .NET-разработчиков и является одним из наиболее подробных справочников по C# и .NET, учитывающим всевозможные нюансы программирования и поддержки приложений для платформ Microsoft. Рассмотрены новейшие возможности языка, особое внимание уделяется структуре языка C#, структурам данных, принципам объектно-ориентированного программирования. Отдельные главы посвящены работе с обобщенными типами, асинхронному выполнению кода, работе с памятью и разнообразным библиотекам классов, языку запросов LINQ.

Для специалистов по C# и .NET

Книга поможет вам:

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

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

В книге разобрано самое ядро языка — как раз тот материал, который необходим для создания хорошего ПО. Книга подробная, тщательно проработанная и затрагивает именно те языковые тонкости и нюансы, которым редко уделяется внимание в других книгах. Здесь всё, что нужно знать о C#.
Джереми Морган, программист, DevOps

Иэн Гриффитс

Иэн Гриффитс (Ian Griffiths) — признанный эксперт в мире информационных технологий, чье имя является синонимом глубокого понимания и мастерства в работе с платформой Microsoft.
Более 20 лет Иэн посвятил проектированию и разработке сложных программных систем, консультированию и обучению специалистов. Его карьера — это яркий путь от ведущего разработчика и архитектора до сооснователя и ключевого технического советника в endjin, британской консалтинговой компании, специализирующейся на передовых решениях в области данных, искусственного интеллекта и облачных технологий.
Иэн является не только практикующим профессионалом высочайшего класса, но и блестящим преподавателем и автором. Он обладает уникальным даром — разлагать самые сложные концепции на понятные и логичные составляющие. Это качество сделало его одним из самых востребованных инструкторов в знаменитой серии курсов O’Reilly, где его лекции по C# и платформе .NET считаются золотым стандартом.
Именно этот богатейший опыт — глубокая практика, экспертные знания и страсть к преподаванию — лег в основу книги «Современный C#». Иэн Гриффитс не просто рассказывает о языке; он погружает читателя в самую суть, учит мыслить как настоящий профессионал и создавать элегантные, эффективные и надежные приложения для любых задач.

Книгу “Современный C#. Разработка настольных, облачных, мобильных и веб-приложений” можно купить в нашем интенет-магазине.

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

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

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

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

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

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

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

Глава 1. Введение в C#…………………………………………………………………………… 23

Почему именно C#?……………………………………………………………………………………………………………………. 24

Управляемый код и CLR………………………………………………………………………………………………… 26

C# предпочитает общность, а не специфичность………………………………………………………… 28

Стандарты и реализации C#…………………………………………………………………………………………………….. 29

Семейство .NET………………………………………………………………………………………………………………. 29

Циклы выпуска и долгосрочная поддержка………………………………………………………………… 31

Ориентир на несколько сред выполнения .NET…………………………………………………………… 32

Visual Studio, Visual Studio Code и JetBrains Rider…………………………………………………………………… 34

Анатомия простой программы…………………………………………………………………………………………………. 37

Написание модульного теста………………………………………………………………………………………… 41

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

Пространства имен и имена компонентов……………………………………………………………. 49

Разрешение неоднозначности……………………………………………………………………………….. 49

Вложенные пространства имен…………………………………………………………………………….. 50

Классы…………………………………………………………………………………………………………………………….. 51

Модульные тесты53

Резюме…………………………………………………………………………………………………………………………………………. 54

Глава 2. Основы программирования на C#……………………………………………. 55

Локальные переменные…………………………………………………………………………………………………………….. 56

Область видимости…………………………………………………………………………………………………………. 61

Неоднозначность имени переменной……………………………………………………………………………. 62

Экземпляры локальных переменных……………………………………………………………………………. 64

Операторы и выражения…………………………………………………………………………………………………………… 65

Операторы………………………………………………………………………………………………………………………. 65

Выражения………………………………………………………………………………………………………………………. 67

Комментарии и пробелы…………………………………………………………………………………………………………… 73

Директивы препроцессора………………………………………………………………………………………………………… 75

Символы компиляции…………………………………………………………………………………………………….. 75

Директивы #error и #warning………………………………………………………………………………………… 76

Директива #line………………………………………………………………………………………………………………. 77

Директива #pragma………………………………………………………………………………………………………… 77

Директива #nullable……………………………………………………………………………………………………….. 78

Директивы #region и #endregion…………………………………………………………………………………… 78

Основные типы данных…………………………………………………………………………………………………………….. 79

Числовые типы………………………………………………………………………………………………………………… 80

Числовые преобразования…………………………………………………………………………………….. 84

Проверяемый контекст…………………………………………………………………………………………… 87

Типы BigInteger, Int128, UInt128 и Half………………………………………………………………… 89

Логические значения………………………………………………………………………………………………………. 91

Строки и символы…………………………………………………………………………………………………………… 91

Неизменяемость строк……………………………………………………………………………………………. 93

Методы работы со строками………………………………………………………………………………… 93

Форматирование данных в строках……………………………………………………………………… 94

Дословные строковые литералы…………………………………………………………………………… 99

Необработанные строковые литералы……………………………………………………………… 101

Строковые литералы UTF-8………………………………………………………………………………… 103

Кортежи…………………………………………………………………………………………………………………………. 104

Деконструкция кортежа……………………………………………………………………………………………….. 107

Тип dynamic…………………………………………………………………………………………………………………… 108

Тип object………………………………………………………………………………………………………………………. 109

Операторы………………………………………………………………………………………………………………………………… 109

Управление потоком выполнения………………………………………………………………………………………….. 115

Принятие решений с операторами if…………………………………………………………………………… 116

Множественный выбор с операторами switch…………………………………………………………… 118

Циклы: while и do………………………………………………………………………………………………………….. 120

Циклы в стиле языка С…………………………………………………………………………………………………. 121

Перебор коллекции циклом foreach……………………………………………………………………………. 123

Шаблоны………………………………………………………………………………………………………………………………….. 124

Объединение и отрицание шаблонов…………………………………………………………………………. 131

Шаблоны отношений…………………………………………………………………………………………………… 132

Уточнение с помощью when………………………………………………………………………………………… 133

Шаблоны в выражениях………………………………………………………………………………………………. 133

Резюме………………………………………………………………………………………………………………………………………. 136

Глава 3. Типы………………………………………………………………………………………. 137

Классы………………………………………………………………………………………………………………………………………. 137

Входные данные инициализации……………………………………………………………………………….. 140

Статические члены………………………………………………………………………………………………………. 141

Статические классы……………………………………………………………………………………………………… 143

Записи……………………………………………………………………………………………………………………………………….. 145

Ссылки и значения null……………………………………………………………………………………………………………. 150

Удаление Null с помощью не-nullable ссылочных типов…………………………………………………….. 154

Структуры………………………………………………………………………………………………………………………………… 163

Когда писать тип значения………………………………………………………………………………………….. 167

Гарантия неизменяемости……………………………………………………………………………………………. 171

Структуры записи………………………………………………………………………………………………………… 172

Класс, структура, запись или кортеж?…………………………………………………………………………………… 173

Члены типов……………………………………………………………………………………………………………………………… 175

Доступность………………………………………………………………………………………………………………….. 175

Поля……………………………………………………………………………………………………………………………….. 175

Конструкторы……………………………………………………………………………………………………………….. 177

Конструкторы по умолчанию и конструкторы без параметров……………………… 180

Цепочка конструкторов……………………………………………………………………………………….. 183

Статические конструкторы…………………………………………………………………………………. 185

Деконструкторы……………………………………………………………………………………………………………. 190

Методы………………………………………………………………………………………………………………………….. 192

Передача аргументов по ссылке…………………………………………………………………………. 192

Ссылочные переменные и возвращаемые значения…………………………………………. 198

Необязательные аргументы………………………………………………………………………………… 201

Перегрузка…………………………………………………………………………………………………………….. 202

Переменное количество аргументов с ключевым словом params……………………. 203

Локальные функции……………………………………………………………………………………………… 205

Однострочные методы…………………………………………………………………………………………. 206

Методы расширения……………………………………………………………………………………………. 207

Свойства………………………………………………………………………………………………………………………… 208

Синтаксис инициализатора………………………………………………………………………………… 212

Свойства только для инициализации…………………………………………………………………. 213

Обязательные свойства……………………………………………………………………………………….. 215

Вычисляемые свойства………………………………………………………………………………………… 216

Свойства и изменяемые типы значений……………………………………………………………… 216

Индексаторы…………………………………………………………………………………………………………. 219

Операторы…………………………………………………………………………………………………………………….. 221

События…………………………………………………………………………………………………………………………. 224

Вложенные типы…………………………………………………………………………………………………………… 224

Интерфейсы………………………………………………………………………………………………………………………………. 226

Реализация интерфейса по умолчанию……………………………………………………………………… 228

Статические виртуальные члены……………………………………………………………………………….. 230

Перечисления…………………………………………………………………………………………………………………………… 232

Другие типы……………………………………………………………………………………………………………………………… 235

Анонимные типы……………………………………………………………………………………………………………………… 235

Частичные типы и методы………………………………………………………………………………………………………. 237

Резюме………………………………………………………………………………………………………………………………………. 239

Глава 4. Обобщенные типы…………………………………………………………………. 240

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

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

Ограничения типа…………………………………………………………………………………………………………. 244

Ограничения типа ссылки……………………………………………………………………………………………. 246

Ограничения типа значения………………………………………………………………………………………… 249

Типы значений с ограничением unmanaged………………………………………………………………. 249

Ограничение NotNull……………………………………………………………………………………………………. 250

Другие специальные ограничения типа……………………………………………………………………… 250

Множественные ограничения……………………………………………………………………………………… 250

Значения, подобные нулю………………………………………………………………………………………………………. 251

Обобщенные методы……………………………………………………………………………………………………………….. 252

Вывод типа……………………………………………………………………………………………………………………………….. 253

Обобщенная математика………………………………………………………………………………………………………… 254

Обобщенные математические интерфейсы…………………………………………………………………………… 257

Интерфейсы числовых категорий……………………………………………………………………………….. 257

Интерфейсы операторов………………………………………………………………………………………………. 262

Интерфейсы функций……………………………………………………………………………………………………. 263

Парсинг и форматирование…………………………………………………………………………………………. 263

Обобщения и кортежи……………………………………………………………………………………………………………… 264

Резюме………………………………………………………………………………………………………………………………………. 265

Глава 5. Коллекции……………………………………………………………………………… 266

Массивы……………………………………………………………………………………………………………………………………. 266

Инициализация массива………………………………………………………………………………………………. 269

Поиск и сортировка………………………………………………………………………………………………………. 272

Многомерные массивы………………………………………………………………………………………………… 276

Зубчатые массивы……………………………………………………………………………………………….. 277

Прямоугольные массивы……………………………………………………………………………………… 279

Копирование и изменение размера…………………………………………………………………………….. 280

Класс List<Т>…………………………………………………………………………………………………………………………… 281

Интерфейсы списков и последовательностей……………………………………………………………………….. 285

Реализация списков и последовательностей…………………………………………………………………………. 291

Реализация IEnumerable<T> с итераторами……………………………………………………………… 291

Тип Collection<Т>………………………………………………………………………………………………………… 296

Тип ReadOnlyCollection<T>………………………………………………………………………………………… 297

Обращение по индексу или диапазону………………………………………………………………………………….. 297

Тип System.Index……………………………………………………………………………………………………………. 298

Тип System.Range………………………………………………………………………………………………………….. 300

Поддержка Index и Range в собственных типах………………………………………………………… 303

Словари…………………………………………………………………………………………………………………………………….. 305

Сортированные словари…………………………………………………………………………………………………………. 309

Множества……………………………………………………………………………………………………………………………….. 310

Очереди и стеки……………………………………………………………………………………………………………………….. 311

Связанные списки…………………………………………………………………………………………………………………….. 312

Конкурентные коллекции……………………………………………………………………………………………………….. 313

Неизменяемые коллекции……………………………………………………………………………………………………….. 314

“Замороженные” коллекции……………………………………………………………………………………………………. 317

Резюме………………………………………………………………………………………………………………………………………. 318

Глава 6. Наследование…………………………………………………………………………. 319

Наследование и преобразования…………………………………………………………………………………………… 320

Наследование интерфейса……………………………………………………………………………………………………… 323

Обобщения……………………………………………………………………………………………………………………………….. 325

Ковариантность и контравариантность………………………………………………………………………………… 326

Тип System.Object……………………………………………………………………………………………………………………… 331

Вездесущие методы System.Object………………………………………………………………………………………….. 332

Доступность и наследование………………………………………………………………………………………………….. 333

Виртуальные методы………………………………………………………………………………………………………………. 334

Абстрактные методы……………………………………………………………………………………………………. 337

Наследование и управление версиями библиотек…………………………………………………….. 338

Статические виртуальные методы……………………………………………………………………………… 343

Ограничения по умолчанию………………………………………………………………………………………… 345

Запечатанные методы и классы…………………………………………………………………………………………….. 347

Доступ к членам базового класса………………………………………………………………………………………….. 349

Наследование и конструкторы………………………………………………………………………………………………. 350

Первичные конструкторы……………………………………………………………………………………………. 352

Обязательные свойства………………………………………………………………………………………………… 354

Инициализация поля…………………………………………………………………………………………………….. 356

Записи……………………………………………………………………………………………………………………………………….. 357

Записи, наследование и ключевое слово with………………………………………………………………………. 359

Специальные базовые типы……………………………………………………………………………………………………. 360

Резюме………………………………………………………………………………………………………………………………………. 361

Глава 7. Время жизни объекта……………………………………………………………… 362

Сборка мусора…………………………………………………………………………………………………………………………. 362

Определение достижимости………………………………………………………………………………………… 365

Сборщик не всегда побеждает…………………………………………………………………………………….. 367

Слабые ссылки……………………………………………………………………………………………………………… 369

Возвращение памяти……………………………………………………………………………………………………. 373

Снижение нагрузки с помощью встроенных массивов……………………………………………… 378

Режимы сборщика мусора…………………………………………………………………………………………… 380

Временная приостановка сборки мусора…………………………………………………………………… 383

Случайное разрушительное сжатие…………………………………………………………………………… 384

Принудительная сборка мусора…………………………………………………………………………………. 387

Деструкторы и финализация…………………………………………………………………………………………………… 388

Интерфейс IDisposable…………………………………………………………………………………………………………….. 391

Необязательная утилизация…………………………………………………………………………………………………… 399

Упаковка…………………………………………………………………………………………………………………………………… 399

Упаковка nullable<T>…………………………………………………………………………………………………………….. 404

Резюме           405

Глава 8. Исключения……………………………………………………………………………. 406

Источники исключений…………………………………………………………………………………………………………… 408

Исключения из API……………………………………………………………………………………………………….. 409

Ошибки времени выполнения………………………………………………………………………………………. 411

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

Объекты исключений……………………………………………………………………………………………………. 413

Множественные блоки catch……………………………………………………………………………………….. 415

Фильтры исключений…………………………………………………………………………………………………… 416

Вложенные блоки try……………………………………………………………………………………………………. 418

Блоки finally………………………………………………………………………………………………………………….. 419

Выброс исключений………………………………………………………………………………………………………………… 421

Повторная генерация исключений……………………………………………………………………………… 423

Быстрые ошибки…………………………………………………………………………………………………………… 425

Типы исключений…………………………………………………………………………………………………………………….. 426

Пользовательские исключения……………………………………………………………………………………………….. 428

Необработанные исключения………………………………………………………………………………………………… 430

Резюме………………………………………………………………………………………………………………………………………. 432

Глава 9. Делегаты, лямбда-выражения и события………………………………… 433

Типы делегатов………………………………………………………………………………………………………………………… 434

Создание делегата……………………………………………………………………………………………………….. 436

Множественные делегаты……………………………………………………………………………………………. 440

Вызов делегата……………………………………………………………………………………………………………… 441

Распространенные типы делегатов…………………………………………………………………………….. 442

Совместимость типов…………………………………………………………………………………………………… 444

За кадром………………………………………………………………………………………………………………………. 446

Анонимные функции………………………………………………………………………………………………………………… 448

Лямбда-выражения и аргументы по умолчанию………………………………………………………. 451

Захват переменных………………………………………………………………………………………………………. 454

Лямбда-выражения и деревья выражений………………………………………………………………….. 462

События……………………………………………………………………………………………………………………………………. 464

Стандартный паттерн делегата события…………………………………………………………………… 466

Пользовательские методы добавления и удаления…………………………………………………… 467

События и сборщик мусора…………………………………………………………………………………………. 470

События и делегаты……………………………………………………………………………………………………… 471

Делегаты против интерфейсов……………………………………………………………………………………………….. 472

Резюме………………………………………………………………………………………………………………………………………. 473

Глава 10. LINQ…………………………………………………………………………………….. 474

Выражения запроса…………………………………………………………………………………………………………………. 475

Как расписываются выражения запроса………………………………………………………………………………. 478

Отложенное вычисление…………………………………………………………………………………………………………. 480

LINQ, обобщения и IQueryable<T>………………………………………………………………………………………… 482

Стандартные операторы LINQ………………………………………………………………………………………………. 485

Фильтрация…………………………………………………………………………………………………………………… 486

Оператор Select…………………………………………………………………………………………………………….. 489

Формирование данных и анонимные типы……………………………………………………….. 490

Проекция и картографирование………………………………………………………………………….. 492

Оператор SelectMany……………………………………………………………………………………………………. 492

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

Проверка на наличие……………………………………………………………………………………………………. 498

Конкретные элементы и поддиапазоны……………………………………………………………………… 499

Операции, сохраняющие последовательность и порядок………………………………………… 504

Агрегация………………………………………………………………………………………………………………………. 504

Группировка…………………………………………………………………………………………………………………. 509

Преобразование……………………………………………………………………………………………………………. 514

Генерация последовательности……………………………………………………………………………………………… 519

Другие реализации LINQ………………………………………………………………………………………………………… 519

Entity Framework Core………………………………………………………………………………………………….. 519

Parallel LINQ (PLINQ)……………………………………………………………………………………………………. 520

LINQ to XML…………………………………………………………………………………………………………………. 520

IAsyncEnumerable<T>………………………………………………………………………………………………….. 521

Реактивные расширения………………………………………………………………………………………………. 521

Резюме………………………………………………………………………………………………………………………………………. 521

Глава 11. Rx: Реактивные расширения………………………………………………… 522

Фундаментальные интерфейсы………………………………………………………………………………………………. 524

Интерфейс IObserver<T>……………………………………………………………………………………………… 525

Интерфейс IObservable<T>………………………………………………………………………………………….. 526

Реализация холодного источника………………………………………………………………………. 527

Реализация горячего источника………………………………………………………………………….. 530

Публикация и подписка с использованием делегатов………………………………………………………….. 533

Создание наблюдаемого источника с помощью делегатов……………………………………… 533

Подписка на наблюдаемый источник с помощью делегата…………………………………….. 536

Создание последовательностей……………………………………………………………………………………………… 537

Empty……………………………………………………………………………………………………………………………… 538

Never………………………………………………………………………………………………………………………………. 538

Return…………………………………………………………………………………………………………………………….. 538

Throw……………………………………………………………………………………………………………………………… 539

Range……………………………………………………………………………………………………………………………… 539

Repeat…………………………………………………………………………………………………………………………….. 539

Generate…………………………………………………………………………………………………………………………. 539

Запросы LINQ………………………………………………………………………………………………………………………….. 540

Операторы группировки………………………………………………………………………………………………. 543

Операторы объединения……………………………………………………………………………………………… 544

Оператор SelectMany……………………………………………………………………………………………………. 547

Агрегация и другие операторы с одним значением…………………………………………………… 547

Оператор Concat…………………………………………………………………………………………………………… 548

Операторы запроса Rx……………………………………………………………………………………………………………. 549

Merge……………………………………………………………………………………………………………………………… 549

Оконные операторы……………………………………………………………………………………………………… 551

Операторы Window и Buffer………………………………………………………………………………… 553

Разметка окон с наблюдаемыми объектами………………………………………………………. 556

Оператор Scan………………………………………………………………………………………………………………. 557

Оператор Amb……………………………………………………………………………………………………………….. 558

Оператор DistinctUntilChanged…………………………………………………………………………………… 559

Планировщики…………………………………………………………………………………………………………………………. 559

Настройка планировщиков…………………………………………………………………………………………. 560

Метод ObserveOn………………………………………………………………………………………………….. 561

Метод SubscribeOn………………………………………………………………………………………………. 562

Явная передача планировщиков………………………………………………………………………… 562

Встроенные планировщики…………………………………………………………………………………………. 562

Субъекты………………………………………………………………………………………………………………………………….. 563

Subject<T>…………………………………………………………………………………………………………………….. 564

BehaviorSubject<T>……………………………………………………………………………………………………… 564

ReplaySubject<T>…………………………………………………………………………………………………………. 565

AsyncSubject<T>…………………………………………………………………………………………………………… 565

Адаптация………………………………………………………………………………………………………………………………… 565

IEnumerable<T> и IAsyncEnumerable<T>………………………………………………………………….. 566

События .NET……………………………………………………………………………………………………………….. 568

Асинхронные API…………………………………………………………………………………………………………. 569

Временные последовательности……………………………………………………………………………………………. 571

Источники с заданным временем………………………………………………………………………………… 571

Операторы с заданным временем……………………………………………………………………………….. 572

Операторы временного окна……………………………………………………………………………………….. 573

Reaqtor — Rx как сервис…………………………………………………………………………………………………………. 574

Резюме………………………………………………………………………………………………………………………………………. 576

Глава 12. Сборки и развертывание………………………………………………………. 577

Анатомия сборки……………………………………………………………………………………………………………………… 577

Метаданные .NET…………………………………………………………………………………………………………. 578

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

Многофайловые сборки……………………………………………………………………………………………….. 579

Другие возможности PE……………………………………………………………………………………………….. 579

Ресурсы в стиле Win32…………………………………………………………………………………………. 579

Консоль против графического интерфейса……………………………………………………….. 581

Идентичность типа………………………………………………………………………………………………………………….. 581

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

Зависит от фреймворка………………………………………………………………………………………………… 585

Автономная модель………………………………………………………………………………………………………. 587

Усечение………………………………………………………………………………………………………………………… 587

Компиляция Ahead-of-Time (AOT)………………………………………………………………………………. 589

ReadyToRun………………………………………………………………………………………………………….. 589

Native АОТ…………………………………………………………………………………………………………….. 590

Загрузка сборок……………………………………………………………………………………………………………………….. 591

Разрешение сборки……………………………………………………………………………………………………….. 593

Явная загрузка………………………………………………………………………………………………………………. 595

Изоляция и плагины с помощью AssemblyLoadContext…………………………………………….. 596

Имена сборок……………………………………………………………………………………………………………………………. 598

Строгие имена………………………………………………………………………………………………………………. 598

Версия……………………………………………………………………………………………………………………………. 601

Номера версий и загрузка сборок……………………………………………………………………………….. 603

Культура……………………………………………………………………………………………………………………….. 604

Защита………………………………………………………………………………………………………………………………………. 608

Целевые фреймворки и .NET Standard……………………………………………………………………………………. 608

Резюме………………………………………………………………………………………………………………………………………. 610

Глава 13. Рефлексия…………………………………………………………………………….. 612

Типы рефлексии……………………………………………………………………………………………………………………….. 613

Класс Assembly……………………………………………………………………………………………………………… 615

Класс Module………………………………………………………………………………………………………………… 618

Тип MemberInfo…………………………………………………………………………………………………………….. 618

Type и TypeInfo………………………………………………………………………………………………………………. 621

Обобщенные типы………………………………………………………………………………………………………… 625

Классы MethodBase, ConstructorInfo и MethodInfo…………………………………………………… 626

Класс ParameterInfo……………………………………………………………………………………………………… 628

Класс FieldInfo……………………………………………………………………………………………………………… 628

Класс PropertyInfo………………………………………………………………………………………………………… 629

Класс EventInfo…………………………………………………………………………………………………………….. 629

Контексты рефлексии………………………………………………………………………………………………………………. 629

Резюме………………………………………………………………………………………………………………………………………. 631

Глава 14. Атрибуты……………………………………………………………………………… 633

Применение атрибутов……………………………………………………………………………………………………………. 633

Цели атрибутов…………………………………………………………………………………………………………….. 636

Атрибуты, обрабатываемые компилятором………………………………………………………………. 639

Имена и версии……………………………………………………………………………………………………… 640

Описание и сопутствующие ресурсы…………………………………………………………………. 641

Атрибуты информации о вызывающем объекте……………………………………………….. 642

Атрибуты, обрабатываемые CLR……………………………………………………………………………….. 646

Атрибут InternalsVisibleToAttribute……………………………………………………………………. 646

JIT-компиляция…………………………………………………………………………………………………….. 648

Атрибуты STAThread и MTAThread…………………………………………………………………….. 649

Атрибуты отладки………………………………………………………………………………………………………… 650

Атрибуты времени сборки…………………………………………………………………………………………… 650

Сериализация JSON без рефлексии…………………………………………………………………….. 650

Генерация регулярных выражений…………………………………………………………………….. 650

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

Определение и использование атрибутов……………………………………………………………………………… 652

Типы атрибутов……………………………………………………………………………………………………………. 653

Получение атрибутов…………………………………………………………………………………………………… 654

Загрузка только метаданных………………………………………………………………………………………. 656

Обобщенные типы атрибутов…………………………………………………………………………………………………. 658

Резюме………………………………………………………………………………………………………………………………………. 658

Глава 15. Файлы и потоки……………………………………………………………………. 660

Класс Stream…………………………………………………………………………………………………………………………….. 661

Позиция и поиск……………………………………………………………………………………………………………. 662

Сброс……………………………………………………………………………………………………………………………… 663

Копирование…………………………………………………………………………………………………………………. 664

Свойство Length……………………………………………………………………………………………………………. 664

Утилизация……………………………………………………………………………………………………………………. 665

Асинхронная операция………………………………………………………………………………………………… 666

Конкретные типы потоков…………………………………………………………………………………………… 667

Один тип, много поведений………………………………………………………………………………………….. 668

Текстово-ориентированные типы…………………………………………………………………………………………… 669

Абстрактные классы TextReader и TextWriter……………………………………………………………. 670

Конкретные типы читателей и писателей………………………………………………………………….. 672

Классы StreamReader и StreamWriter…………………………………………………………………. 672

Классы StringReader и StringWriter……………………………………………………………………. 673

Кодирование…………………………………………………………………………………………………………………. 674

Кодировки кодовых страниц………………………………………………………………………………. 675

Использование кодировок напрямую…………………………………………………………………. 676

Файлы и каталоги……………………………………………………………………………………………………………………. 677

Класс FileStream…………………………………………………………………………………………………………… 677

Класс File………………………………………………………………………………………………………………………. 679

Класс Directory……………………………………………………………………………………………………………… 681

Класс Path…………………………………………………………………………………………………………………….. 682

Сериализация…………………………………………………………………………………………………………………………… 683

Классы BinaryReader, BinaryWriter и BinaryPrimitives……………………………………………… 683

Сериализация CLR……………………………………………………………………………………………………….. 684

JSON……………………………………………………………………………………………………………………………….. 685

Класс JsonSerializer……………………………………………………………………………………………… 686

JSON DOM…………………………………………………………………………………………………………….. 692

Резюме………………………………………………………………………………………………………………………………………. 695

Глава 16. Многопоточность………………………………………………………………….. 697

Потоки………………………………………………………………………………………………………………………………………. 697

Потоки, переменные и общее состояние…………………………………………………………………….. 698

Локальное хранилище потока…………………………………………………………………………………….. 702

Класс Thread…………………………………………………………………………………………………………………. 704

Пул потоков…………………………………………………………………………………………………………………… 706

Запуск задач в пуле потоков с помощью Task…………………………………………………… 706

Эвристика создания потока………………………………………………………………………………… 707

Привязка к потоку и SynchronizationContext……………………………………………………………… 708

Класс ExecutionContext……………………………………………………………………………………………….. 710

Синхронизация………………………………………………………………………………………………………………………… 712

Мониторы и ключевое слово lock……………………………………………………………………………….. 713

Как расширяется ключевое слово lock………………………………………………………………. 716

Ожидание и уведомление…………………………………………………………………………………….. 717

Тайм-ауты…………………………………………………………………………………………………………….. 719

Другие примитивы синхронизации…………………………………………………………………………….. 719

Класс Interlocked………………………………………………………………………………………………………….. 720

“Ленивая” инициализация……………………………………………………………………………………………. 722

Класс Lazy<T>……………………………………………………………………………………………………… 723

Класс LazyInitializer…………………………………………………………………………………………….. 724

Прочие средства поддержки конкурентности……………………………………………………………. 724

Задачи………………………………………………………………………………………………………………………………………. 726

Классы Task и Task<T>………………………………………………………………………………………………… 726

Типы ValueTask и ValueTask<T>………………………………………………………………………… 727

Способы создания задачи…………………………………………………………………………………… 729

Статус задачи………………………………………………………………………………………………………. 729

Получение результата…………………………………………………………………………………………. 730

Продолжения………………………………………………………………………………………………………………… 731

Планировщики………………………………………………………………………………………………………………. 734

Обработка ошибок……………………………………………………………………………………………………….. 735

Пользовательские задачи без потоков……………………………………………………………………….. 736

Отношения “родитель/ребенок”………………………………………………………………………………….. 737

Составные задачи………………………………………………………………………………………………………… 738

Другие асинхронные шаблоны………………………………………………………………………………………………. 738

Отмена………………………………………………………………………………………………………………………………………. 740

Параллелизм…………………………………………………………………………………………………………………………….. 740

Класс Parallel……………………………………………………………………………………………………………….. 740

Parallel LINQ………………………………………………………………………………………………………………….. 742

TPL Dataflow…………………………………………………………………………………………………………………. 742

Резюме………………………………………………………………………………………………………………………………………. 743

Глава 17. Асинхронные функции языка………………………………………………. 744

Ключевые слова: async и await………………………………………………………………………………………………. 745

Контексты выполнения и синхронизации………………………………………………………………….. 749

Множественные операции и циклы…………………………………………………………………………….. 751

Потребление и производство асинхронных последовательностей…………………. 754

Асинхронная утилизация…………………………………………………………………………………….. 756

Возврат задачи……………………………………………………………………………………………………………… 757

Применение async к вложенным методам…………………………………………………………………… 759

Шаблон await…………………………………………………………………………………………………………………………… 759

Обработка ошибок…………………………………………………………………………………………………………………… 764

Проверка аргументов…………………………………………………………………………………………………… 766

Единичные и множественные исключения…………………………………………………………………. 768

Конкурентные операции и пропущенные исключения…………………………………………….. 769

Резюме………………………………………………………………………………………………………………………………………. 770

Глава 18. Эффективная работа с памятью……………………………………………. 772

(Не) копируйте…………………………………………………………………………………………………………………………. 773

Представление последовательных элементов с помощью Span<T>………………………………….. 776

Вспомогательные методы……………………………………………………………………………………………. 781

Выражения коллекций и последовательности…………………………………………………………… 781

Сопоставление с образцом………………………………………………………………………………………….. 782

Только стек……………………………………………………………………………………………………………………. 783

Использование ref с полями……………………………………………………………………………………………………. 783

Представление последовательности элементов с помощью Memory<T>………………………….. 787

Тип ReadOnlySequence<T>…………………………………………………………………………………………………….. 788

Обработка потоков данных с помощью конвейеров……………………………………………………………. 788

Обработка JSON в ASP.NET Core……………………………………………………………………………………………. 791

Резюме………………………………………………………………………………………………………………………………………. 796

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

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

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

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

На Марсе Маркусу не место!

На Марсе Маркусу не место

Робот  Маркус создан, чтобы чинить сложных роботов, и его очень ждут на Марсе. На красную планету Маркус оправляется со своим помощником Лучиком, которого сделал сам из старого будильника. Но Марс и новый знакомый робот Брудер, который терпит бедствие,  встречают их очень неприветливо. Чтобы избежать опасностей, Маркусу придется проявить всю свою находчивость, смелость и даже чувство юмора.

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

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

«Я в норме. Пойдём пить какао!»

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

Маркус и Лучик отправляются на Марс, где их помощи ждет Брудер,  сломанный робот-исследователь. У нового знакомого оказался неуживчивый характер, как и у самой красной планеты. Маркусу и Лучику будет нелегко справиться со всеми трудностями и опасностями. Но они знают, что далеко-далеко на Земле их ждут друзья и горячая кружка какао. А что еще надо для счастья роботам?

Робот Маркус

 

Автор

Нет фото

Антон Бабчук — писатель, сценарист мультипликационных сериалов, создатель более 200 песен,  мечтает создавать мультфильмы по своим произведениям.

Художник

Нет фото

Каким будет робот Маркус на страницах книги, придумал мультипликатор и художник Сергей Эйтвид, который не только работает на знаменитой студии «Муха», но и учит детей рисовать.

Робот

Маркус — робот-ремонтник с душой исследователя и твёрдым убеждением, что лучше какао могут быть только какао с друзьями. Создан чинить сложные механизмы на Марсе, но предпочитает чинить сломанные будильники и находить общий язык с капризными марсоходами. Обладает не только полным набором инструментов, но и чувством юмора, любопытством и талантом попадать в невероятные переделки. Его девиз: «Я в норме. Пойдём пить какао!»

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

Вышла книга “Программирование бэкенда на Python. Практическое руководство”

Программирование бэкенда на Python. Практическое руководство

Книга посвящена современным технологиям для программирования и поддержки серверной части (бэкенда) на Python. Рассказано о программировании на Python в облачной среде, управляемой через Docker и Kubernetes, о фреймворке Flask для веб-разработки на Python, о поглощении и преобразовании данных через FastAPI, об интеграции новых приложений и модулей Python с устоявшимися базами данных с применением SQLAlchemy, авторизации и аутентификации с применением OAuth, взаимодействии с брокерами сообщений Kafka и RabbitMQ, а также о повышении производительности языка Python и об эффективной работе с унаследованным кодом.

Для Python-разработчиков

В этой книге

  • Как писать эффективный и хорошо структурированный код на Python, придерживаясь наилучших практик
  • Как обеспечить эффективность приложений и упростить их масштабирование, применяя техники асинхронного программирования
  • Какова роль Kubernetes и Docker в оркестрации и контейнеризации приложений на Python
  • Как эксплуатировать облачные сервисы для обеспечения гарантированно высокой доступности и максимальной производительности.
  • Как усовершенствовать обработку данных путем интеграции с базами данных при помощи SQLAlchemy.
  • Как защищать веб-приложения, настраивая механизмы авторизации и аутентификации при помощи OAuth
  • Как эффективно обрабатывать данные в режиме реального времени при помощи брокеров сообщений RabbitMQ и Kafka
  • Как, сократить количество ошибок, реализовать непрерывную интеграцию и непрерывное развертывание

Эта книга — не просто руководство по программированию, а книга-маршрут, которая поможет выйти на уровень настоящего эксперта по серверной части стека, умеющего проектировать и развертывать мощные и эффективные приложения.

 

Тим Питерс

Тим Питерс (Tim Peters) — американский разработчик программного обеспечения, который создал алгоритм гибридной сортировки Timsort, внес большой вклад в язык программирования Python и его оригинальную реализацию CPython, а также известен в сообществе Python.
С 2001 по 2014 год он был активным членом совета директоров Python Software Foundation. Питерс был влиятельным автором списков рассылки Python. Он также является высокопоставленным участником форума Stack Overflow, в основном для ответов, касающихся Python.
Тим Питерс был удостоен награды Python Software Foundation за выдающиеся заслуги за 2017 год.
(источник, Википедия)

Книгу “Программирование бэкенда на Python. Практическое руководство” можно купить в нашем интенет-магазине.

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

Пролог……………………………………………………………………………. 23

Предварительные требования…………………………………………… 25

Начальные навыки…………………………………………………………………………………… 25

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

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

ГЛАВА 1. Основы разработки внутренних компонентов……… 28

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

Описание разработки внутренних компонентов…………………………………… 29

Основные внутренние компоненты…………………………………………………. 29

Сервер…………………………………………………………………………………………… 29

База данных…………………………………………………………………………………. 31

Интерфейсы прикладного программирования (API)………………… 32

Веб-фреймворк……………………………………………………………………………… 33

Middleware (связующее или промежуточное программное обеспечение)      35

Кеширование………………………………………………………………………………… 36

Функционирование внутренних компонентов……………………………….. 36

Роль Python в разработке внутренних компонентов…………………………….. 38

Универсальность и читабельность…………………………………………………. 38

Универсальная стандартная библиотека………………………………………. 39

Фреймворки и инструменты для разработки внутренних компонентов               39

Поддержка асинхронной работы……………………………………………………. 40

Возможность интеграции…………………………………………………………………. 40

Возможность подключения к базам данных………………………………….. 41

Сообщество и ресурсы…………………………………………………………………….. 41

Искусственный интеллект и машинное обучение………………………….. 41

Настройка среды разработки: Python, VS Code и Linux………………………. 42

Установка Linux……………………………………………………………………………….. 42

Установка Python……………………………………………………………………………… 42

Установка Visual Studio Code (VS Code)…………………………………………. 43

Настройка VS Code для Python……………………………………………………….. 43

Настройка виртуальной среды……………………………………………………….. 44

Заключительные этапы и тестирование…………………………………………. 44

Знакомство с виртуальными средами…………………………………………………….. 45

Что такое виртуальная среда?………………………………………………………… 45

Зачем нужна виртуальная среда?…………………………………………………… 46

Как настроить и использовать виртуальную среду?…………………….. 46

Установка……………………………………………………………………………………… 46

Создание виртуальной среды…………………………………………………….. 46

Активация виртуальной среды…………………………………………………… 47

Установка пакетов……………………………………………………………………….. 47

Деактивация…………………………………………………………………………………. 47

Управление зависимостями………………………………………………………… 47

Передовой опыт………………………………………………………………………………… 48

Основные принципы работы с интерфейсом командной строки (CLI).. 49

Описание интерфейса командной строки………………………………………. 49

Основные команды интерфейса командной строки………………………. 49

Советы по использованию интерфейса командной строки………….. 52

Введение в управление версиями с помощью Git………………………………….. 53

Знакомство с управлением версиями и Git……………………………………… 53

Основные операции Git для разработки внутренних компонентов 54

Установка Git……………………………………………………………………………….. 54

Конфигурирование Git…………………………………………………………………. 54

Инициализация репозитория………………………………………………………. 54

Клонирование репозитория………………………………………………………… 55

Добавление и фиксация файлов………………………………………………….. 55

Ветвление и слияние……………………………………………………………………. 55

Размещение изменений………………………………………………………………… 56

Извлечение обновлений………………………………………………………………. 56

Обработка конфликтов при слиянии………………………………………….. 56

Использование журнала Git………………………………………………………… 56

Библиотека Python Refresher: синтаксис, структуры данных и функции 57

Синтаксис Python……………………………………………………………………………… 57

Отступы………………………………………………………………………………………… 57

Переменные………………………………………………………………………………….. 57

Комментарии………………………………………………………………………………… 58

Структуры данных…………………………………………………………………………… 58

Списки…………………………………………………………………………………………… 58

Кортежи………………………………………………………………………………………… 58

Множества……………………………………………………………………………………. 59

Словари………………………………………………………………………………………… 59

Функции…………………………………………………………………………………………….. 59

Определение функции………………………………………………………………….. 59

Вызов функции……………………………………………………………………………… 60

Параметры……………………………………………………………………………………. 60

Аргументы ключевых слов………………………………………………………….. 60

Произвольные аргументы……………………………………………………………. 61

Лямбда-функции…………………………………………………………………………… 61

Обработка ошибок……………………………………………………………………………. 61

Модули и пакеты………………………………………………………………………………. 62

Импорт модулей…………………………………………………………………………… 62

Импорт с помощью псевдонимов……………………………………………….. 62

Оператор импорта from……………………………………………………………….. 62

Передовой опыт программирования на Python…………………………………….. 63

Поддержка принципов «Дзен Python»…………………………………………….. 63

Соблюдение стандарта PEP 8…………………………………………………………. 63

Написание документальных строк…………………………………………………. 64

Использование встроенных функций и библиотек Python……………. 64

Использование списков и генераторов выражений……………………….. 65

Обработка ошибок с помощью исключений………………………………….. 65

Использование менеджеров контекста для управления ресурсами 66

Функция должна выполнять одну задачу и иметь
минимально возможный размер………………………………………………………. 66

Избежание преждевременной оптимизации…………………………………… 66

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

Тестирование своего кода……………………………………………………………….. 67

Резюме……………………………………………………………………………………………………….. 67

ГЛАВА 2. Создание первого веб-приложения с помощью Flask 69

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

Основы Flask……………………………………………………………………………………………… 70

Что представляет собой Flask?………………………………………………………… 70

Основные возможности Flask…………………………………………………………… 71

Простота……………………………………………………………………………………….. 71

Гибкость……………………………………………………………………………………….. 71

Сервер разработки и отладчик…………………………………………………… 72

Основан на Юникоде…………………………………………………………………… 72

Документация………………………………………………………………………………. 72

Запуск и работа с Flask……………………………………………………………………. 72

Маршрутизация………………………………………………………………………………… 74

Шаблоны…………………………………………………………………………………………… 74

Настройка окружения Flask…………………………………………………………………….. 76

Создание проекта……………………………………………………………………………… 76

Настройка Flask………………………………………………………………………………… 77

Установка Flask……………………………………………………………………………. 77

Создание приложения Flask………………………………………………………… 77

Создание простого представления…………………………………………….. 77

Управление зависимостями с помощью Pip……………………………………. 77

Настройка приложения Flask………………………………………………………….. 78

Создание файла конфигурации………………………………………………….. 78

Загрузка конфигурации……………………………………………………………….. 78

Запуск приложения Flask…………………………………………………………………. 78

Командная строка Flask………………………………………………………………. 78

Использование скрипта……………………………………………………………….. 79

Маршрутизация и представления…………………………………………………………… 79

Определение маршрутов………………………………………………………………….. 80

Динамические маршруты………………………………………………………………… 80

Методы HTTP……………………………………………………………………………………. 81

Создание URL-адресов…………………………………………………………………….. 81

Обработка ошибок……………………………………………………………………………. 82

Эффективное сочетание маршрутов и представлений………………….. 83

Шаблоны и статические файлы………………………………………………………………. 83

Описание шаблонов…………………………………………………………………………. 84

Управление статическими файлами……………………………………………….. 85

Организация статических файлов………………………………………………. 86

Обслуживание статических файлов…………………………………………… 86

Работа с формами и загрузка файлов…………………………………………………….. 88

Flask — работа с формами………………………………………………………………. 88

Создание HTML-формы………………………………………………………………. 88

Создание маршрута для отображения формы………………………….. 88

Обработка данных формы………………………………………………………….. 88

Загрузка файлов……………………………………………………………………………….. 89

Модификация HTML-формы для загрузки файлов…………………… 89

Обработка загрузки файлов в Flask……………………………………………. 89

Основы интеграции баз данных……………………………………………………………… 90

Настройка SQLAlchemy с помощью Flask……………………………………… 92

Установка Flask-SQLAlchemy…………………………………………………….. 92

Настройка приложения……………………………………………………………….. 92

Определение моделей………………………………………………………………………. 92

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

Взаимодействие с базой данных…………………………………………………….. 93

Вставка данных……………………………………………………………………………. 93

Запрос данных……………………………………………………………………………… 93

Обновление данных…………………………………………………………………….. 94

Удаление данных…………………………………………………………………………. 94

Работа с отношениями……………………………………………………………………… 94

Извлечение связанных данных………………………………………………………… 95

Использование опций запросов………………………………………………………. 95

Введение в расширения Flask………………………………………………………………….. 96

Описание расширений Flask……………………………………………………………. 96

Flask-WTF……………………………………………………………………………………… 97

Flask-SQLAlchemy………………………………………………………………………… 97

Flask-Migrate…………………………………………………………………………………. 97

Flask-Login…………………………………………………………………………………….. 98

Flask-Mail………………………………………………………………………………………. 98

Flask-RESTful……………………………………………………………………………….. 98

Использование расширений Flask…………………………………………………… 99

Развертывание приложения Flask…………………………………………………………. 100

Подготовка приложения Flask к развертыванию…………………………. 100

Выбор хостинга………………………………………………………………………………. 101

Настройка веб-сервера и сервера приложений WSGI………………… 101

Использование Heroku…………………………………………………………………… 102

Подготовка приложения……………………………………………………………. 102

Настройка Git-репозитория………………………………………………………. 102

Создание приложения Heroku………………………………………………….. 102

Выполнение проверки развертывания…………………………………….. 103

Резюме……………………………………………………………………………………………………… 103

ГЛАВА 3. Дополнительные возможности Flask………………….. 105

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

Создание модульной структуры больших приложений с помощью
Flask Blueprints………………………………………………………………………………………… 106

Для чего предназначен Flask Blueprints?………………………………………. 106

Создание и регистрация эскизов…………………………………………………… 107

Определение эскиза…………………………………………………………………… 107

Регистрация эскиза…………………………………………………………………….. 107

Структурирование представлений в эскизах………………………………. 108

Использование эскизов…………………………………………………………………… 108

Шаблон Application Factory во Flask…………………………………………………….. 109

Описание шаблона Application Factory………………………………………… 109

Использование шаблона Application Factory……………………………….. 110

Создание функции Factory………………………………………………………… 110

Настройка параметров конфигурации…………………………………….. 110

Регистрация сценариев и расширений…………………………………….. 111

Реализация RESTful-сервисов с помощью Flask-RESTful…………………… 112

Введение в Flask-RESTful………………………………………………………………. 112

Функционирование Flask-RESTful………………………………………………… 113

Создание REST API с помощью Flask-RESTful……………………………. 113

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

Аутентификация и авторизация пользователей………………………………….. 115

Значение аутентификации, авторизации и управления сессиями 115

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

Авторизация……………………………………………………………………………….. 116

Управление сессиями………………………………………………………………… 116

Реализация аутентификации в Flask……………………………………………… 116

Установка Flask-Login……………………………………………………………….. 116

Настройка Flask-Login………………………………………………………………. 116

Функция загрузчика пользователя…………………………………………… 117

Определение модели пользователя………………………………………….. 117

Создание маршрутов аутентификации……………………………………. 117

Выполнение авторизации………………………………………………………………. 118

Управление доступом на основе ролей (RBAC)……………………… 118

Проверка прав доступа……………………………………………………………… 119

Обработка ошибок и ведение журнала………………………………………………… 119

Flask — обработка ошибок……………………………………………………………. 120

Обработка ошибок приложения……………………………………………….. 120

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

Flask — ведение журнала………………………………………………………………. 121

Использование протоколирования для данных запроса……………. 121

Пользовательские средства регистрации…………………………………….. 122

Методы оптимизации производительности…………………………………………. 122

Оптимизация баз данных……………………………………………………………….. 123

Оптимизация запросов………………………………………………………………. 123

Пакетные вставки и обновления……………………………………………….. 123

Оптимизация обработки запросов………………………………………………… 123

Эффективная последовательность данных……………………………… 123

Асинхронные обработчики………………………………………………………. 124

Кеширование ответов………………………………………………………………… 125

Настройка приложений и веб-серверов……………………………………….. 125

Мониторинг и профилирование……………………………………………………. 126

Интеграция приложений Flask с Docker……………………………………………….. 127

Установка Docker……………………………………………………………………………. 127

Создание файла Dockerfile………………………………………………………… 128

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

Сборка образа Docker……………………………………………………………….. 129

Запуск контейнера Docker………………………………………………………… 129

Тестирование контейнера Docker…………………………………………………. 129

Резюме……………………………………………………………………………………………………… 130

ГЛАВА 4. Введение в FastAPI………………………………………….. 132

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

Переход на FastAPI………………………………………………………………………………… 133

Основные различия между FastAPI и Flask………………………………….. 133

Производительность………………………………………………………………….. 133

Аннотации типов данных и автоматическая валидация данных 134

Внедрение зависимостей…………………………………………………………… 135

Встроенная интерактивная документация по API………………….. 136

Современные возможности Python…………………………………………… 136

Создание RESTful API с помощью FastAPI………………………………………….. 136

Определение конечных точек RESTful…………………………………………. 137

Параметры пути и строки запросов……………………………………………… 138

Параметры пути…………………………………………………………………………. 138

Параметры запросов…………………………………………………………………. 138

Использование тела запроса…………………………………………………………. 139

Обработка ответа…………………………………………………………………………… 139

Пользовательские коды состояния…………………………………………… 139

Заголовки ответа……………………………………………………………………….. 139

Обработка ошибок…………………………………………………………………………. 140

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

Описание внедрения зависимостей в FastAPI………………………………. 141

Как работает внедрение зависимостей в FastAPI?………………………. 141

Определение зависимостей……………………………………………………….. 141

Использование зависимостей в обработчиках маршрутов……. 142

Работа с зависимостями в больших приложениях………………………. 143

Расширенная интеграция баз данных с SQLAlchemy…………………………. 143

Настройка SQLAlchemy с помощью FastAPI……………………………….. 144

Установка необходимых пакетов…………………………………………….. 144

Настройка URL базы данных…………………………………………………… 144

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

Интеграция SQLAlchemy с FastAPI……………………………………………….. 145

Зависимость от сеанса работы с базой данных……………………… 145

Выполнение операций с базой данных……………………………………. 145

Асинхронная обработка………………………………………………………………… 146

Настройка асинхронного подключения к базе данных…………. 146

Подключение и отключение событий………………………………………. 146

Использование асинхронных запросов…………………………………… 146

Реализация фоновых задач……………………………………………………………………. 147

Основы фоновых задач в FastAPI………………………………………………….. 147

Как определить фоновые задачи?…………………………………………………. 147

Реализация более сложных фоновых операций………………………….. 148

Настройка Celery……………………………………………………………………….. 148

Запуск задач Celery из FastAPI…………………………………………………. 149

Интеграция FastAPI и Docker………………………………………………………………… 150

Установка Docker……………………………………………………………………………. 150

Создание Docker-файла для FastAPI…………………………………………….. 150

Создание образа Docker………………………………………………………………… 151

Запуск приложения FastAPI в контейнере Docker……………………….. 152

Проверка работоспособности приложения…………………………………. 152

Резюме……………………………………………………………………………………………………… 152

ГЛАВА 5. Работа с базами данных…………………………………… 154

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

MySQL и PostgreSQL………………………………………………………………………………. 155

MySQL……………………………………………………………………………………………… 156

PostgreSQL……………………………………………………………………………………….. 156

Выбор между MySQL и PostgreSQL………………………………………………. 157

MongoDB…………………………………………………………………………………………………. 159

Описание MongoDB и модели документов…………………………………… 159

Документы………………………………………………………………………………….. 159

Коллекции…………………………………………………………………………………… 159

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

Ключевые особенности MongoDB………………………………………………… 160

Интеграция MongoDB…………………………………………………………………….. 161

Установка…………………………………………………………………………………… 161

Подключение к MongoDB…………………………………………………………. 161

Операции…………………………………………………………………………………….. 161

Принципы проектирования баз данных……………………………………………….. 162

Основные принципы проектирования баз данных………………………. 162

Нормализация……………………………………………………………………………. 162

Модель отношений между сущностями…………………………………… 163

Пример разработки схемы базы данных……………………………………… 163

SQL-код для создания таблиц……………………………………………………….. 164

Операции CRUD……………………………………………………………………………………… 165

Создание записей (CREATE)…………………………………………………………. 165

Чтение записей (READ)………………………………………………………………….. 166

Обновление записей (UPDATE)……………………………………………………… 166

Удаление записей (DELETE)…………………………………………………………. 167

Рекомендации по выполнению операций CRUD…………………………. 167

Расширенные методы обработки запросов…………………………………………. 167

Подзапросы…………………………………………………………………………………….. 168

Пример программы: «Поиск курсов, на которые не зарегистрировался ни один студент»      168

Объединения……………………………………………………………………………………. 168

Пример программы: «Список студентов с информацией о курсах» 169

Агрегатные функции SQL………………………………………………………………. 169

Пример программы: «Подсчет количества студентов, записанных на каждый курс»               169

Расширенная фильтрация с помощью оператора HAVING………… 170

Пример программы: «Курсы с более чем 5 студентами»……….. 170

Оконные функции……………………………………………………………………………. 170

Пример программы: «Распределение студентов по дате зачисления на каждый курс»            170

Миграция баз данных и контроль версий……………………………………………. 171

Основные сведения о миграции баз данных………………………………… 172

Настройка Alembic…………………………………………………………………………. 172

Установка Alembic…………………………………………………………………….. 172

Инициализация Alembic…………………………………………………………….. 172

Настройка Alembic…………………………………………………………………….. 173

Создание и применение миграций………………………………………………… 173

Создание миграции……………………………………………………………………. 173

Редактирование сценария миграции………………………………………… 173

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

Управление изменениями схемы базы данных……………………………. 174

Создание версий………………………………………………………………………… 174

Совместная работа……………………………………………………………………. 174

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

Интеграция баз данных с ОРМ на Python……………………………………………. 175

Обзор ОРМ для Python…………………………………………………………………… 175

Обзор SQLAlchemy…………………………………………………………………………. 175

SQLAlchemy Core……………………………………………………………………….. 175

SQLAlchemy ORM……………………………………………………………………… 176

Интеграция SQLAlchemy ORM с Python………………………………………. 176

Установка…………………………………………………………………………………… 176

Определение моделей………………………………………………………………… 176

Создание сессии…………………………………………………………………………. 177

Выполнение операций с базой данных……………………………………. 177

Стратегии кеширования для оптимизации баз данных………………………. 178

Типы кеширования…………………………………………………………………………. 178

Кеширование результатов………………………………………………………… 178

Кеширование объектов……………………………………………………………… 178

Кеширование планов запросов………………………………………………… 179

Реализация кеширования в веб-приложениях……………………………… 180

Redis в качестве кеша………………………………………………………………… 180

Стратегия кеширования…………………………………………………………….. 180

Рекомендации по эффективному кешированию…………………………… 181

Резюме……………………………………………………………………………………………………… 181

ГЛАВА 6. Асинхронное программирование в Python…………. 184

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

Общее описание асинхронного программирования…………………………… 186

Что такое асинхронное программирование?……………………………….. 186

Асинхронное программирование для разработки внутренних компонентов     186

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

Веб-серверы……………………………………………………………………………….. 187

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

Работа приложения в режиме реального времени………………….. 187

Архитектура микросервисов…………………………………………………….. 188

Как работает асинхронное программирование?………………………… 188

Цикл событий……………………………………………………………………………… 188

Корутины (сопрограммы или асинхронные функции)…………… 188

Задачи и фьючерсы……………………………………………………………………. 188

Пример программы: «Асинхронное выполнение»……………………….. 189

Основы asyncio……………………………………………………………………………………….. 189

Синтаксис async……………………………………………………………………………… 190

Синтаксис await……………………………………………………………………………… 190

Структура программы asyncio………………………………………………………. 190

Пример программы: «Интеграция библиотеки asyncio в приложение для университета»             191

Разработка асинхронных веб-приложений…………………………………………. 192

Пример программы: «Асинхронное университетское
приложение»……………………………………………………………………………………. 193

Настройка и установка……………………………………………………………… 193

Определение конечных точек асинхронной связи………………….. 193

Асинхронный доступ к базам данных………………………………………………….. 194

Описание асинхронного доступа к базам данных………………………. 194

Настройка и установка………………………………………………………………….. 195

Интеграция асинхронных операций с базами данных
в веб-фреймворке FastAPI………………………………………………………………. 195

Конфигурация…………………………………………………………………………….. 195

Функции асинхронной базы данных……………………………………….. 196

Использование асинхронных функций в маршрутах…………….. 197

Внедрение веб-сокетов…………………………………………………………………………… 197

WebSocket — что это?……………………………………………………………………. 197

Реализация WebSocket в FastAPI…………………………………………………… 198

Настройка и базовая конечная точка WebSocket…………………… 198

Установка FastAPI и Uvicorn…………………………………………………….. 199

Определение конечной точки WebSocket………………………………… 199

Обновление записей в режиме реального времени…………………. 199

Сохранение соединений WebSocket………………………………………… 200

Интеграция с процессом регистрации……………………………………… 200

Передовой опыт и шаблоны Async……………………………………………………….. 201

Обработка ошибок в асинхронном коде………………………………………. 201

Пример программы: «Корректная обработка ошибок базы данных»             201

Управление параллельными процессами и отмена задач………….. 202

Пример программы: «Отмена устаревших запросов
к базе данных»……………………………………………………………………………. 202

Использование менеджеров контекста для управления ресурсами 203

Пример программы: «Асинхронный менеджер контекста для подключения к базе данных»  203

Разделение и модульное построение кода…………………………………… 203

Пример программы: «Модульная обработка WebSocket»…….. 203

Отладка асинхронных приложений……………………………………………………… 204

Инструменты и методы отладки……………………………………………………. 205

Пример программы: «Ведение подробного журнала»…………… 205

Пример программы: «Использование сообщений print для получения немедленной обратной связи»               205

Пример программы: «Включение режима отладки asyncio»…. 206

Резюме……………………………………………………………………………………………………… 207

ГЛАВА 7. Организация работы с пользователями
и их безопасность……………………………………………………………. 209

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

Проектирование систем аутентификации пользователей………………….. 210

Определение требований……………………………………………………………….. 210

Компоненты системы аутентификации пользователей………………. 211

Пример программы: «Подключение аутентификации пользователей» 212

Реализация стандартов OAuth и JWT…………………………………………………… 213

Введение в OAuth……………………………………………………………………………. 213

Введение в веб-токены JSON (JWT)……………………………………………….. 214

Пример программы: «Реализация OAuth и JWT»…………………………. 214

Настройка OAuth с помощью провайдера………………………………. 214

Интеграция OAuth в приложение……………………………………………… 215

Реализация JWT для управления сеансами…………………………….. 215

Контроль доступа на основе ролей (RBAC)………………………………………… 216

Определение эффективности RBAC……………………………………………… 216

Пример программы: «Внедрение RBAC»……………………………………… 217

Определение ролей и разрешений……………………………………………. 217

Настройка среды……………………………………………………………………….. 217

Определение моделей пользователей и ролей………………………… 218

Создание ролей………………………………………………………………………….. 218

Назначение ролей пользователям……………………………………………. 218

Обеспечение проверки ролей……………………………………………………. 219

Обеспечение безопасности REST API………………………………………………….. 219

Что необходимо для обеспечения безопасности REST API?……… 219

Стратегии обеспечения безопасности REST API………………………… 220

Использование HTTPS………………………………………………………………. 220

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

Валидация и дезинфекция входных данных……………………………. 221

Внедрение ограничения скорости……………………………………………. 222

Управление сеансами пользователей…………………………………………………… 222

Основные понятия…………………………………………………………………………… 222

Реализация безопасного управления сеансами…………………………… 223

Создание и обработка сеансов…………………………………………………. 223

Сохранение сеансов………………………………………………………………….. 224

Истечение срока действия сеанса…………………………………………….. 224

Обслуживание и безопасность сеансов…………………………………… 224

Внедрение двухфакторной аутентификации……………………………………….. 225

Описание двухфакторной аутентификации…………………………………. 225

Шаги по внедрению 2FA………………………………………………………………… 226

Генерация секретного ключа для пользователя……………………… 226

Связывание секретного ключа с приложением Authenticator… 227

Проверка TOTP во время входа в систему……………………………….. 227

Интеграция 2FA в процесс входа в систему…………………………….. 227

Резюме……………………………………………………………………………………………………… 228

ГЛАВА 8. Развертывание внутренних приложений, написанных на языке Python          230

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

Обзор Docker и контейнеров………………………………………………………………….. 231

Описание контейнерной технологии…………………………………………….. 231

Роль Docker в контейнеризации…………………………………………………….. 231

Доминирующее положение Docker……………………………………………….. 232

Пример программы: «Использование Docker»…………………………….. 233

Использование Docker для приложений, написанных на языке Python 234

Установка Docker……………………………………………………………………………. 234

Контейнеризация университетского приложения……………………….. 236

Подготовка приложения……………………………………………………………. 236

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

Сборка образа Docker……………………………………………………………….. 237

Запуск контейнера Docker………………………………………………………… 237

Kubernetes для управления приложениями………………………………………….. 237

Описание Kubernetes………………………………………………………………………. 238

Установка и настройка Kubernetes……………………………………………….. 238

Установка Minikube…………………………………………………………………… 238

Установка kubectl………………………………………………………………………. 239

Развертывание университетского приложения на Kubernetes……. 239

Создание конфигурации развертывания…………………………………. 239

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

Открытие приложения……………………………………………………………….. 240

Доступ к приложению……………………………………………………………….. 240

CI/CD для внутренних приложений на Python……………………………………. 241

Основные принципы работы CI/CD……………………………………………… 241

Использование CI/CD для университетского приложения…………. 241

Настройка контроля версий……………………………………………………… 241

Выбор инструмента CI/CD……………………………………………………….. 242

Использование Nginx в качестве обратного прокси-сервера……………… 244

Функция Nginx…………………………………………………………………………………. 244

Установка и настройка Nginx………………………………………………………… 245

Установка Nginx…………………………………………………………………………. 245

Настройка Nginx в качестве обратного прокси-сервера………… 245

SSL-сертификаты и настройка HTTPS…………………………………………………. 247

Описание SSL/TLS и HTTPS………………………………………………………….. 247

Генерация SSL-сертификатов………………………………………………………… 247

Установка Certbot………………………………………………………………………. 248

Получение сертификата……………………………………………………………. 248

Проверка установки SSL-сертификата…………………………………….. 248

Конфигурация HTTPS в Nginx……………………………………………………….. 248

Масштабирование приложений на Python………………………………………….. 249

Необходимость масштабирования……………………………………………….. 249

Горизонтальное и вертикальное масштабирование…………………… 250

Горизонтальное масштабирование (масштабирование наружу/внутрь)       250

Вертикальное масштабирование (масштабирование вверх/вниз) 250

Реализация масштабирования в Kubernetes…………………………………. 250

Определение запросов и лимитов ресурсов…………………………….. 251

Настройка горизонтального автоматического масштабирования подсистем             252

Контроль масштабирования…………………………………………………….. 253

Резюме……………………………………………………………………………………………………… 253

ГЛАВА 9. Микросервисы и интеграция с облаком…………….. 255

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

Проектирование и разработка микросервисов с помощью Python……. 256

Разбиение приложения на микросервисы…………………………………….. 257

Определение границ сервисов……………………………………………………….. 257

Создание независимых сред………………………………………………………….. 257

Разработка API для межсервисного взаимодействия………………….. 258

Упаковка сервисов в контейнеры………………………………………………….. 258

Управление микросервисами с помощью Docker и Kubernetes………….. 259

Контейнеризация с помощью Docker……………………………………………. 259

Упаковка каждого микросервиса в контейнер………………………… 260

Организация работы с помощью Kubernetes……………………………….. 260

Создание развертываний Kubernetes……………………………………….. 261

Управление сервисами с помощью Kubernetes Services…………. 261

Развертывание приложений Python на AWS……………………………………….. 262

Настройка AWS для университетского приложения…………………… 262

Создание учетной записи AWS………………………………………………… 262

Настройка IAM (управление идентификацией и доступом)….. 263

Настройка AWS CLI………………………………………………………………….. 263

Развертывание приложения на AWS…………………………………………….. 264

Вариант 1: использование Elastic Beanstalk……………………………. 264

Вариант 2: использование EC2………………………………………………… 264

Использование бессерверных архитектур с AWS Lambda………………… 265

Описание AWS Lambda…………………………………………………………………. 265

Установка AWS Lambda………………………………………………………………… 266

Подготовка приложения……………………………………………………………. 266

Создание функции Lambda в AWS…………………………………………… 267

Реализация gRPC для взаимодействия микросервисов……………………….. 268

Зачем нужен gRPC………………………………………………………………………….. 268

Реализация gRPC в микросервисах на Python……………………………… 269

Определение сервиса с помощью буферов протокола…………… 269

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

Реализация сервиса на Python………………………………………………….. 270

Создание клиента………………………………………………………………………. 271

Резюме……………………………………………………………………………………………………… 271

ГЛАВА 10. Брокеры сообщений и асинхронная обработка задач 273

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

Обзор брокеров сообщений…………………………………………………………………… 274

Роль брокеров сообщений во внутренних приложениях…………….. 274

Redis как брокер сообщений………………………………………………………….. 275

Каким образом Redis обеспечивает обмен сообщениями?…….. 275

Интеграция Kafka для обработки данных в реальном времени………… 277

Описание Apache Kafka…………………………………………………………………. 277

Основные компоненты Kafka………………………………………………………… 277

Интеграция Kafka для обработки данных в режиме
реального времени………………………………………………………………………….. 278

Установка и настройка Kafka………………………………………………….. 278

Создание тем………………………………………………………………………………. 278

Реализация производителей и потребителей Kafka……………….. 278

Асинхронная обработка задач с помощью Celery………………………………. 280

Знакомство с асинхронной обработкой задач…………………………….. 280

Использование Celery для асинхронной обработки задач…………. 280

Как работает Celery?…………………………………………………………………. 281

Использование Celery…………………………………………………………………….. 281

Установка Celery и Redis…………………………………………………………… 281

Настройка Celery……………………………………………………………………….. 281

Запуск Celery Worker…………………………………………………………………. 282

Постановка задач в очередь……………………………………………………… 282

RabbitMQ как альтернативный брокер сообщений…………………………….. 282

Описание RabbitMQ и принцип его работы…………………………………. 283

Интеграция RabbitMQ……………………………………………………………………. 283

Установка RabbitMQ…………………………………………………………………. 284

Настройка RabbitMQ в приложении………………………………………… 284

Отправка сообщений…………………………………………………………………. 285

Резюме……………………………………………………………………………………………………… 285

Эпилог………………………………………………………………………….. 287

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

Встречайте: “Современные фронтенды на базе HTMX”

Современные фронтенды на базе HTMX

Рассмотрены практические подходы к созданию современных динамичных веб-интерфейсов и веб-приложений с использованием HTMX — технологии, позволяющей строить интерактивные приложения на основе HTML с минимальным объемом JavaScript- кода. Подробно описаны принципы работы с HTMX в связке с Java, Spring Boot и Thymeleaf. Показаны базовые приемы замены DOM-элементов с использованием различных триггеров, работа с запросами и заголовками, а также использование библиотеки htmx-spring-boot. Рассказано, как использовать замены Out Of Band. Описаны способы реализации современных UI-паттернов, таких как ленивая загрузка, активный поиск, бесконечная прокрутка и валидация форм в реальном времени. Рассматриваются возможности подключения веб-компонентов и усиления клиентской логики с помощью JavaScript и библиотеки Alpine.js. Описано, как обеспечить безопасность веб-приложений на HTMX, как обрабатывать события, отправляемые сервером, и использовать веб-сокеты.

Создание динамичных и интерактивных веб-интерфейсов больше не требует сложного программирования на JavaScript. Благодаря технологии HTMX — революционному подходу к фронтенд-разработке — вы можете строить мощные веб-приложения, используя минимум скриптов и привычный HTML. Эта книга поможет вам освоить HTMX в связке с Java, Spring Boot и Thymeleaf, изменив ваше представление о веб-разработке.
Автор последовательно вводит в основы работы с HTMX — от простых механизмов замены DOM-элементов с использованием различных триггеров до полноценной интеграции с контроллерами Spring Boot. Показаны современные UI-паттерны: ленивая загрузка, активный поиск, бесконечная прокрутка, валидация форм в реальном времени и другие. Рассматриваются возможности использования веб-фреймворков и компонентов JavaScript для усиления интерактивности на стороне клиента.

Вы узнаете:

• Как устроен синтаксис HTMX: триггеры, цели, замены
• Как работать с заголовками запросов и ответов
• Как использовать библиотеку htmx-spring-boot
• Что такое замены Out Of Band и зачем они нужны
• Как использовать JavaScript и библиотеку Alpine.js вместе с HTMX
• Как обеспечить безопасность приложений на HTMX
• Как реализовать ленивую загрузку, бесконечную прокрутку и активный поиск
• Как выполнять валидацию форм в реальном времени
• Как интегрировать HTMX с веб-компонентами и обмениваться данными в реальном времени
• Как обрабатывать события, отправляемые сервером, и использовать веб-сокеты

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

Напутственное слово……………………………………………………………………………….. 9

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

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

ГЛАВА 1. Используемые методы……………………………………………………………. 15

1.1. HTMX…………………………………………………………………………………………………………………………………… 15

1.2. Spring Boot……………………………………………………………………………………………………………………………. 16

1.3. Spring Framework…………………………………………………………………………………………………………………. 16

1.4. Thymeleaf…………………………………………………………………………………………………………………………….. 17

1.5. Alpine……………………………………………………………………………………………………………………………………. 17

1.6. Tailwind CSS…………………………………………………………………………………………………………………………. 18

ГЛАВА 2. Начало работы………………………………………………………………………. 19

2.1. Предварительные настройки……………………………………………………………………………………………… 19

2.1.1. macOS/Linux………………………………………………………………………………………………………………. 19

2.1.2. Windows……………………………………………………………………………………………………………………… 20

2.2. Инструмент ttcli…………………………………………………………………………………………………………………… 20

2.2.1. Суть вопроса……………………………………………………………………………………………………………… 20

2.2.2. Установка…………………………………………………………………………………………………………………… 21

2.2.3. Генерация проекта……………………………………………………………………………………………………. 21

2.2.4. Запуск приложения…………………………………………………………………………………………………… 25

2.3. Плагины IntelliJ IDEA………………………………………………………………………………………………………….. 26

2.4. Краткие выводы………………………………………………………………………………………………………………….. 27

ГЛАВА 3. Начало работы с HTMX…………………………………………………………. 29

3.1. Пример «Hello World»………………………………………………………………………………………………………….. 29

3.2. Триггеры………………………………………………………………………………………………………………………………. 34

3.2.1. Модификаторы триггеров………………………………………………………………………………………… 34

3.2.2. Фильтры триггеров……………………………………………………………………………………………………. 35

3.2.3. Особые события………………………………………………………………………………………………………… 35

3.2.4. Пример……………………………………………………………………………………………………………………….. 37

3.3. Цели……………………………………………………………………………………………………………………………………… 43

3.4. Замена………………………………………………………………………………………………………………………………….. 43

3.5. HTTP-глаголы……………………………………………………………………………………………………………………… 47

3.6. Краткие выводы………………………………………………………………………………………………………………….. 47

ГЛАВА 4. Заголовки запроса/ответа………………………………………………………. 49

4.1. Заголовки запроса………………………………………………………………………………………………………………. 49

4.2. Заголовки ответа…………………………………………………………………………………………………………………. 51

4.3. Библиотека htmx-spring-boot……………………………………………………………………………………………… 52

4.4. Краткие выводы………………………………………………………………………………………………………………….. 55

ГЛАВА 5. Проект 1: TodoMVC……………………………………………………………….. 57

5.1. Начальная реализация……………………………………………………………………………………………………….. 57

5.2. Усиление приложения………………………………………………………………………………………………………… 69

5.3. Тонкая реализация HTMX…………………………………………………………………………………………………. 70

5.3.1. Добавление нового элемента todo…………………………………………………………………………… 70

5.3.2. Обновление количества пунктов……………………………………………………………………………… 74

5.3.3. Пометка пункта как завершенного………………………………………………………………………….. 77

5.3.4. Удаление пункта……………………………………………………………………………………………………….. 79

5.4. Краткие выводы………………………………………………………………………………………………………………….. 81

ГЛАВА 6. Замена Out Of Band………………………………………………………………… 83

6.1. Общие принципы…………………………………………………………………………………………………………………. 83

6.2. Пример…………………………………………………………………………………………………………………………………. 84

6.2.1. Генерация проекта……………………………………………………………………………………………………. 84

6.2.2. Модель предметной области……………………………………………………………………………………. 85

6.2.3. Настройка пользовательского интерфейса…………………………………………………………….. 88

6.2.4. Ввод продолжительности регистрации времени……………………………………………………. 91

6.2.5. Итоги дня……………………………………………………………………………………………………………………. 95

6.3. Краткие выводы………………………………………………………………………………………………………………….. 97

ГЛАВА 7. Скрипт на стороне клиента……………………………………………………. 99

7.1. Vanilla JavaScript…………………………………………………………………………………………………………………. 99

7.1.1. Конфигурация проекта…………………………………………………………………………………………… 100

7.1.2. Программный интерфейс Numbers………………………………………………………………………… 100

7.1.3. Веб-интерфейс…………………………………………………………………………………………………………. 103

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

7.1.5. Обработка ошибок………………………………………………………………………………………………….. 107

7.2. Alpine.js………………………………………………………………………………………………………………………………. 112

7.2.1. Настройка проекта…………………………………………………………………………………………………. 112

7.2.2. Модель предметной области…………………………………………………………………………………. 113

7.2.3. Встроенное редактирование краткого содержания проблемы…………………………… 121

7.2.3.1. Визуальная индикация………………………………………………………………………………. 121

7.2.3.2. Реализация технологии Happy Flow…………………………………………………………. 122

7.2.3.3. Реализация отмены потока (cancel flow)………………………………………………….. 127

7.2.3.4. Обработка ошибок……………………………………………………………………………………… 131

7.2.4. Использование технологии drag-and-drop…………………………………………………………….. 133

7.3. Краткие выводы………………………………………………………………………………………………………………… 140

ГЛАВА 8. Безопасность………………………………………………………………………… 141

8.1. HTMX и безопасность………………………………………………………………………………………………………. 141

8.2. Закладки…………………………………………………………………………………………………………………………….. 141

8.2.1. Инициализация проекта…………………………………………………………………………………………. 141

8.2.2. Добавление Spring Security……………………………………………………………………………………… 142

8.3. Классическая настройка Thymeleaf……………………………………………………………………………….. 143

8.4. Добавление закладки с помощью HTMX……………………………………………………………………….. 149

8.5. Удаление закладки……………………………………………………………………………………………………………. 151

8.5.1. Удаление с помощью скрытого ввода…………………………………………………………………… 153

8.5.2. Удаление с помощью метатегов…………………………………………………………………………….. 153

8.5.3. Удаление с помощью встроенного синтаксиса Thymeleaf для JavaScript…………. 154

8.6. Обработка выхода из системы………………………………………………………………………………………… 156

8.7. Краткие выводы………………………………………………………………………………………………………………… 157

ГЛАВА 9. Проект 2: приложение для работы с контактами…………………. 159

9.1. Настройка проекта…………………………………………………………………………………………………………… 159

9.2. Добавление контакта……………………………………………………………………………………………………….. 167

9.3. Поиск………………………………………………………………………………………………………………………………….. 174

9.4. Просмотр контакта…………………………………………………………………………………………………………… 176

9.5. Редактирование и удаление контакта…………………………………………………………………………….. 179

9.6. Удаление с помощью HTMX……………………………………………………………………………………………. 185

9.7. Встроенная проверка наличия дубликатов адресов электронной почты…………………… 188

9.7.1. Реализация пользовательского валидатора…………………………………………………………. 188

9.7.2. Триггер валидации в процессе ввода…………………………………………………………………….. 191

9.7.3. Улучшение пользовательского опыта…………………………………………………………………… 193

9.7.4. Использование hx-validate для предотвращения лишних запросов…………………… 196

9.8. Пагинация………………………………………………………………………………………………………………………….. 196

9.8.1. Генерация контактов с помощью Datafaker…………………………………………………………. 197

9.8.2. Ручная пагинация……………………………………………………………………………………………………. 197

9.8.3. Шаблон «Click to load»……………………………………………………………………………………………. 201

9.8.4. Бесконечная прокрутка………………………………………………………………………………………….. 202

9.9. Активный поиск…………………………………………………………………………………………………………………. 203

9.9.1. Пагинация поиска……………………………………………………………………………………………………. 203

9.9.2. Поиск по типу………………………………………………………………………………………………………….. 205

9.10. Удаление строки из списка…………………………………………………………………………………………….. 207

9.10.1. Настройка перенаправления кнопки Delete……………………………………………………….. 210

9.11. Архивация списка контактов…………………………………………………………………………………………. 211

9.11.1. Архиватор……………………………………………………………………………………………………………… 211

9.11.2. Создание архива…………………………………………………………………………………………………… 215

9.11.3. Ссылка на скачивание………………………………………………………………………………………….. 217

9.12. Краткие выводы………………………………………………………………………………………………………………. 220

ГЛАВА 10. Веб-компоненты…………………………………………………………………. 221

10.1. Что такое веб-компоненты?……………………………………………………………………………………………. 221

10.2. Интеграция Shoelace……………………………………………………………………………………………………….. 221

10.3. Дерево GitHub…………………………………………………………………………………………………………………. 222

10.3.1. API GitHub……………………………………………………………………………………………………………. 222

10.3.2. Реализация ленивой загрузки…………………………………………………………………………….. 226

10.3.3. Добавление релизов репозитория……………………………………………………………………… 229

10.3.4. Отображение примечаний к релизу…………………………………………………………………… 230

10.4. Краткие выводы………………………………………………………………………………………………………………. 233

ГЛАВА 11. События, отправляемые сервером, и веб-сокеты………………… 235

11.1. События, отправляемые сервером………………………………………………………………………………… 235

11.1.1. Что такое «события, отправляемые сервером»?………………………………………………. 235

11.1.2. Использование расширения HTMX SSE…………………………………………………………… 235

11.1.2.1. Настройка проекта………………………………………………………………………………. 235

11.1.2.2. Загрузка файла…………………………………………………………………………………….. 238

11.1.2.3. Отображение обрабатываемых строк……………………………………………….. 241

11.1.2.4. Отображение индикатора хода выполнения…………………………………….. 246

11.1.2.5. Проверка активности подключения……………………………………………………. 249

11.2. Веб-сокеты………………………………………………………………………………………………………………………. 252

11.2.1. Что такое веб-сокеты?………………………………………………………………………………………… 252

11.2.2. Использование расширения HTMX WS……………………………………………………………. 252

11.2.2.1. Настройка проекта………………………………………………………………………………. 252

11.2.2.2. Отправка HTML-кода обратно с помощью шаблонов Thymeleaf….. 258

11.3. Краткие выводы………………………………………………………………………………………………………………. 261

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

ПРИЛОЖЕНИЕ. Журнал изменений……………………………………………………. 265

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