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

Встречайте: “Программирование с помощью искусственного интеллекта”

Программирование с помощью искусственного интеллекта

Книга посвящена практике использования инструментов искусственного интеллекта  для всех этапов создания кода: от разработки требований и планирования до проектирования, написания, отладки и тестирования. Предложена методология модульного программирования, которая эффективно сочетается с подходом генерации кода с применением ИИ. Рассмотрены  основные возможности и сценарии использования инструментов ИИ для разработки, оценены плюсы и минусы популярных систем. Показаны перспективы применения универсальных языковых моделей (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

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

Вышла книга “Программирование бэкенда на 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

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

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

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

Книга посвящена разработке современных веб-приложений с использованием JavaScript и встроенных возможностей браузера на основе Web API. Приведены практические примеры реализации функций, которые ранее требовали сторонних плагинов: диалоговые окна, работа с геолокацией и другими возможностями, предоставляемыми браузером. Освещаются как устоявшиеся, так и находящиеся в стадии разработки API-интерфейсы, позволяющие создавать мощные и интерактивные веб-приложения, глубоко интегрированные с устройствами пользователей. Рассматривается, как браузеры реализуют модель разрешений для предоставления доступа к таким функциям, как геолокация и push-уведомления. Каждая задача в книге сопровождается готовыми рецептами, содержащими описание проблемы, решение с пояснениями и расширенное обсуждение. Книга ориентирована на программистов с опытом работы на JavaScript, знакомых с программным интерфейсом DOM (Document Object Model).

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

Повысьте уровень JavaScript-приложений

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

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

Это практическое руководство предлагает коллекцию прикладных примеров использования новейших возможностей браузерных API. Автор помогает разобраться, какие задачи можно решить с их помощью и как применять эти инструменты на практике. Поскольку речь идет о стандартизированных технологиях, вы всегда можете обратиться к надежной документации, например, на MDN Web Docs.

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

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

Книгу “Web API. Сборник рецептов: Повысьте уровень JavaScript-приложений” можно купить в нашем интенет-магазине.

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

Возможности современных браузеров. 14

Недостатки сторонних библиотек. 14

Для кого предназначена эта книга. 14

Что содержится в этой книге. 15

Дополнительные ресурсы.. 15

Соглашения об используемых обозначениях. 16

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

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

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

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

ГЛАВА 1. Асинхронные API. 21

1.0. Введение. 21

1.1. Работа с промисами. 22

1.2. Загрузка изображения с помощью использования резервного изображения (fallback) 24

1.3. Связывание промисов. 26

1.4. Использование ключевых слов  async и await 28

1.5. Параллельное использование промисов. 29

1.6. Анимация элемента с помощью  requestAnimationFrame. 30

1.7. Обертывание событий API в промис. 33

ГЛАВА 2. Простое сохранение данных с помощью Web Storage API. 36

2.0. Введение. 36

2.1. Проверка поддержки Web Storage. 38

2.2. Сохранение строковых данных. 39

2.3. Сохранение простых объектов. 40

2.4. Сохранение сложных объектов. 41

2.5. Отслеживание изменений в хранилище. 46

2.6. Поиск всех известных ключей. 47

2.7. Удаление данных. 49

ГЛАВА 3. URL-адреса и маршрутизация. 51

3.0. Введение. 51

3.1. Определение относительного URL-адреса. 52

3.2. Удаление параметров запроса из URL-адреса. 54

3.3. Добавление параметров запроса к URL-адресу. 56

3.4. Чтение параметров запроса. 58

3.5. Создание простого маршрутизатора  на стороне клиента. 60

3.6. Сопоставление URL-адресов с шаблонами. 62

ГЛАВА 4. Сетевые запросы.. 65

4.0. Введение. 65

4.1. Отправка запроса с помощью XMLHttpRequest 66

4.2. Отправка GET-запроса с помощью Fetch API 67

4.3. Отправка POST-запроса с помощью Fetch API 69

4.4. Загрузка файла с помощью Fetch API 70

4.5. Отправка Beacon. 71

4.6. Прослушивание удаленных событий  с помощью server-sent events. 72

4.7. Обмен данными с WebSockets  в режиме реального времени. 74

ГЛАВА 5. База данных IndexedDB.. 77

5.0. Введение. 77

5.1. Создание, чтение и удаление объектов  в базе данных. 79

5.2. Обновление существующей базы данных. 85

5.3. Выполнение запросов с использованием индексов. 87

5.4. Поиск строковых значений с помощью курсора. 90

5.5. Разбивка большого набора данных на страницы.. 92

5.6. Использование промисов  с IndexedDB API 94

ГЛАВА 6. Наблюдение за элементами DOM… 97

6.0. Введение. 97

6.1. Отложенная загрузка изображения при прокрутке. 99

6.2. Обертывание IntersectionObserver промисом.. 101

6.3. Автоматическая пауза при воспроизведении видео. 102

6.4. Анимация изменений высоты.. 103

6.5. Изменение содержимого элемента  в зависимости от размера. 105

6.6. Применение перехода  в момент появления элемента в поле зрения. 107

6.7. Использование режима бесконечной прокрутки. 108

ГЛАВА 7. Формы.. 110

7.0. Введение. 110

7.1. Заполнение поля формы из локального хранилища. 111

7.2. Отправка формы с помощью Fetch и FormData API 112

7.3. Отправка формы в формате JSON.. 114

7.4. Создание обязательного поля формы.. 116

7.5. Ограничения при вводе числа. 117

7.6. Определение шаблона валидации. 118

7.7. Валидация формы.. 119

7.8. Применение пользовательской логики валидации. 122

7.9. Проверка группы флажков. 124

7.10. Асинхронная проверка поля формы.. 127

ГЛАВА 8. API веб-анимации. 130

8.0. Введение. 130

8.1. Применение эффекта “пульсации”  при нажатии кнопки. 132

8.2. Запуск и остановка анимации. 135

8.3. Анимация вставки и удаления элементов DOM.. 136

8.4. Реверсирование анимации. 137

8.5. Отображение индикатора прокрутки. 141

8.6. Создание подпрыгивающего элемента. 143

8.7. Одновременный запуск нескольких анимаций. 144

8.8. Отображение анимации загрузки. 146

8.9. Соблюдение в анимации  предпочтений пользователя. 148

ГЛАВА 9. Web Speach API. 150

9.0. Введение. 150

9.1. Добавление продиктованного текста  в текстовое поле. 152

9.2. Создание Promise-помощника  для распознавания речи. 155

9.3. Получение доступных голосов. 156

9.4. Синтез речи. 157

9.5. Настройка параметров синтеза речи. 159

9.6. Автоматическая приостановка речи. 160

ГЛАВА 10. Работа с файлами. 161

10.0. Введение. 161

10.1. Загрузка текста из файла. 161

10.2. Загрузка изображения из URL-адреса данных. 164

10.3. Загрузка видео  в качестве URL-адреса объекта. 166

10.4. Загрузка изображения с помощью перетаскивания. 167

10.5. Проверка и запрос разрешений. 170

10.6. Экспорт данных API в файл. 171

10.7. Экспорт данных API со ссылкой  для скачивания. 173

10.8. Загрузка файла с помощью перетаскивания. 175

ГЛАВА 11. Интернационализация. 177

11.0. Введение. 177

11.1. Форматирование даты.. 178

11.2. Получение частей отформатированной даты.. 178

11.3. Форматирование относительной даты.. 179

11.4. Форматирование чисел. 181

11.5. Округление знаков после точки. 182

11.6. Форматирование ценового диапазона. 183

11.7. Форматирование единиц измерения. 184

11.8. Применение правил плюрализации. 184

11.9. Подсчет символов, слов и предложений. 186

11.10. Форматирование списков. 187

11.11. Сортировка массива имен. 188

ГЛАВА 12. Веб-компоненты.. 190

12.0. Введение. 190

12.1. Создание компонента  для отображения сегодняшней даты.. 193

12.2. Создание компонента  для форматирования пользовательской даты.. 194

12.3. Создание компонента обратной связи. 196

12.4. Создание компонента профильной карточки. 200

12.5. Создание компонента изображения  с отложенной загрузкой. 202

12.6. Создание компонента раскрытия информации. 204

12.7. Создание стилизованного компонента кнопки. 207

ГЛАВА 13. Элементы интерфейса пользователя. 211

13.0. Введение. 211

13.1. Создание диалогового окна  предупреждения. 212

13.2. Создание диалогового окна подтверждения. 215

13.3. Создание веб-компонента  диалогового окна подтверждения. 218

13.4. Использование элемента раскрытия информации. 220

13.5. Отображение всплывающего окна. 222

13.6. Ручное управление всплывающим окном.. 223

13.7. Позиционирование всплывающего окна  относительно элемента. 224

13.8. Отображение всплывающей подсказки. 227

13.9. Отображение уведомления. 229

ГЛАВА 14. Интеграция устройств. 231

14.0. Введение. 231

14.1. Считывание состояния батареи. 231

14.2. Считывание состояния сети. 234

14.3. Определение местоположения устройства. 235

14.4. Отображение местоположения устройства  на карте. 237

14.5. Копирование и вставка текста. 238

14.6. Совместное использование контента  с помощью Web Share API 241

14.7. Создание вибрации устройства. 242

14.8. Настройка ориентации устройства. 243

ГЛАВА 15. Измерение производительности. 245

15.0. Введение. 245

15.1. Измерение производительности загрузки страниц. 246

15.2. Измерение эффективности  использования ресурсов. 247

15.3. Поиск самых медленных ресурсов. 247

15.4. Определение тайминга для конкретного ресурса. 248

15.5. Профилирование производительности  рендеринга. 249

15.6. Профилирование многоэтапных задач. 251

15.7. Прослушивание показателей производительности. 253

ГЛАВА 16. Работа с консолью… 255

16.0. Введение. 255

16.1. Стилизации вывода консоли. 255

16.2. Использование уровней в журналах сообщений. 256

16.3. Создание именованных регистраторов. 257

16.4. Отображение массива объектов  в таблице. 258

16.5. Использование консольных таймеров. 260

16.6. Использование консольных групп. 261

16.7. Использование счетчиков. 263

16.8. Регистрация переменной и ее значения. 264

16.9. Протоколирование трассировки стека. 265

16.10. Проверка ожидаемых значений. 266

16.11. Изучение свойств объекта. 267

ГЛАВА 17. CSS. 269

17.0. Введение. 269

17.1. Выделение текстовых областей. 269

17.2. Предотвращение появления текста  без стилизации. 272

17.3. Анимация переходов DOM.. 274

17.4. Изменение таблиц стилей во время выполнения. 276

17.5. Условная установка CSS-класса. 277

17.6. Соответствие медиазапросам.. 277

17.7. Получение вычисленного стиля элемента. 278

ГЛАВА 18. Медиа. 281

18.0. Введение. 281

18.1. Запись экрана. 281

18.2. Захват изображения с камеры пользователя. 284

18.3. Захват видео с камеры пользователя. 286

18.4. Определение возможностей  системной поддержки медиа. 288

18.5. Применение видеофильтров. 290

ГЛАВА 19. Заключительные замечания. 292

19.0. Введение. 292

19.1. В защиту сторонних библиотек. 292

19.2. Определяйте функции, а не версии браузера. 292

19.3. Полифилы.. 293

19.4. Заглядывая в будущее. 293

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

Об авторе. 302

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

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

Новинка: “Современная аналитика данных в Excel: Использование Power Query, Power Pivot и других инструментов для расширенного анализа данных”

Современная аналитика данных в Excel: Использование Power Query, Power Pivot и других инструментов для расширенного анализа данных

Рассмотрены современные методы очистки, анализа и визуализации данных в Microsoft Excel. Описаны инструменты Power Query для создания воспроизводимых процессов подготовки данных, средства Power Pivot для построения реляционных моделей и настройки аналитических показателей. Приведены практические примеры использования динамических массивов, функций на базе искусственного интеллекта и интеграции с языком Python. Показано, как создавать отчеты и аналитические материалы, ранее считавшиеся трудновыполнимыми в Excel. Книга ориентирована на специалистов по данным, бизнес-аналитиков и пользователей Excel, заинтересованных в расширении своих возможностей.

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

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

Если вы все еще не модернизировали процессы очистки данных и создания отчетов в Microsoft Excel, вы, возможно, упускаете шанс существенно повысить эффективность своей работы. А если ваша цель — глубокий и детальный анализ данных, стоит знать: возможности Excel гораздо шире, чем принято думать. Это практическое руководство открывает читателю доступ к современному арсеналу функций Excel и демонстрирует другие мощные инструменты аналитики.

Автор показывает бизнес-аналитикам, специалистам по данным и всем, кто работает с цифрами, как извлечь максимум пользы из привычных таблиц, используя новейшие возможности Excel. Вы научитесь создавать воспроизводимые сценарии очистки данных с помощью Power Query и строить реляционные модели прямо внутри рабочей книги, используя Power Pivot. Кроме того, вы познакомитесь с современными инструментами анализа — от динамических массивов и функций на базе искусственного интеллекта до интеграции с языком Python.

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

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

Книгу “Современная аналитика данных в Excel: Использование Power Query, Power Pivot и других инструментов для расширенного анализа данных” можно купить в нашем интенет-магазине.

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

Цель обучения……………………………………………………………………………………………………………………………. 11

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

Технические требования………………………………………………………………………………………………… 11

Необходимые навыки…………………………………………………………………………………………………….. 12

Как я к этому пришел?………………………………………………………………………………………………………………. 12

Что такое «современная аналитика»? Почему именно Excel?……………………………………………….. 13

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

Упражнения в конце глав………………………………………………………………………………………………………….. 14

Отбор тем……………………………………………………………………………………………………………………………………. 15

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

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

Контакты…………………………………………………………………………………………………………………………………….. 16

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

Часть I. Очистка и преобразование данных
в Power Query………………………………………………………………………………….. 19

Глава 1. Таблицы — проводники в современный Excel…………………………. 21

Создание заголовков таблицы и ссылки на них……………………………………………………………………… 21

Добавление строки итогов к таблице………………………………………………………………………………………. 23

Именование таблиц Excel………………………………………………………………………………………………………….. 25

Форматирование таблиц Excel…………………………………………………………………………………………………. 25

Изменение диапазона таблицы………………………………………………………………………………………………… 26

Упорядочивание данных для анализа…………………………………………………………………………………….. 26

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

Упражнения………………………………………………………………………………………………………………………………… 28

Глава 2. Первые шаги в Power Query…………………………………………………….. 29

Что такое Power Query?……………………………………………………………………………………………………………… 29

Power Query как «разрушитель мифов» об Excel……………………………………………………………………… 29

«Excel не воспроизводит результаты»………………………………………………………………………….. 29

«В Excel нет настоящего null»………………………………………………………………………………………… 30

«Excel не может обработать более 1 048 576 строк»………………………………………………….. 31

Power Query как инструмент ETL в Excel…………………………………………………………………………………. 31

Extract (Извлечение)……………………………………………………………………………………………………….. 31

Transform (Преобразование)…………………………………………………………………………………………. 33

Load (Загрузка)……………………………………………………………………………………………………………….. 33

Обзор редактора Power Query…………………………………………………………………………………………………… 34

Лента……………………………………………………………………………………………………………………………….. 34

Запросы…………………………………………………………………………………………………………………………… 36

Импортированные данные…………………………………………………………………………………………….. 37

Выход из редактора Power Query………………………………………………………………………………….. 40

Возвращение в редактор Power Query…………………………………………………………………………… 41

Профилирование данных в Power Query………………………………………………………………………………….. 41

Что такое профилирование данных?……………………………………………………………………………. 42

Опции предварительного просмотра данных……………………………………………………………… 42

Monospaced и Show whitespace……………………………………………………………………………… 42

Column quality и Column distribution…………………………………………………………………….. 43

Что такое «допустимое» значение?…………………………………………………………………. 43

Отсутствующие значения………………………………………………………………………………… 43

Ошибки в ячейках……………………………………………………………………………………………… 44

Column profile (Профиль столбца)………………………………………………………………………… 45

Как убрать ограничение на тысячу строк?………………………………………………………………….. 46

Окончание профилирования данных……………………………………………………………………………. 47

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

Упражнения………………………………………………………………………………………………………………………………… 47

Глава 3. Преобразование строк в Power Query……………………………………….. 48

Удаление пропущенных значений…………………………………………………………………………………………… 48

Обновление запроса………………………………………………………………………………………………………………….. 50

Разделение данных на строки…………………………………………………………………………………………………… 52

Заполнение заголовков и пустых ячеек…………………………………………………………………………………… 55

Замена заголовков столбцов…………………………………………………………………………………………. 55

Заполнение пропущенных значений…………………………………………………………………………….. 55

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

Упражнения………………………………………………………………………………………………………………………………… 56

Глава 4. Преобразование столбцов в Power Query………………………………….. 57

Изменение регистра столбца…………………………………………………………………………………………………….. 57

Разделение на столбцы……………………………………………………………………………………………………………… 58

Изменение типов данных…………………………………………………………………………………………………………… 59

Удаление столбцов……………………………………………………………………………………………………………………. 59

Работа с датами…………………………………………………………………………………………………………………………. 60

Создание пользовательских столбцов…………………………………………………………………………………….. 61

Загрузка и проверка данных…………………………………………………………………………………………. 62

Вычисляемые столбцы и собственные расчеты………………………………………………………….. 62

Изменение структуры данных………………………………………………………………………………………………….. 63

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

Упражнения………………………………………………………………………………………………………………………………… 65

Глава 5. Объединение и добавление данных в Power Query…………………… 66

Добавление нескольких источников………………………………………………………………………………………… 66

Подключение к внешним рабочим книгам Excel………………………………………………………….. 66

Добавление запросов……………………………………………………………………………………………………… 69

Реляционные соединения………………………………………………………………………………………………………….. 70

Левое внешнее соединение: почти то же, что и VLOOKUP()………………………………………. 72

Внутреннее соединение: только точное соответствие………………………………………………… 75

Управление вашими запросами……………………………………………………………………………………………….. 76

Группировка запросов…………………………………………………………………………………………………… 76

Просмотр зависимостей запросов…………………………………………………………………………………. 77

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

Упражнения………………………………………………………………………………………………………………………………… 79

Часть II. Моделирование и анализ данных
с помощью Power Pivot……………………………………………………………… 81

Глава 6. Знакомство с Power Pivot………………………………………………………….. 83

Что такое Power Pivot?……………………………………………………………………………………………………………….. 83

Зачем нужен Power Pivot?………………………………………………………………………………………………………….. 83

Power Pivot и модель данных…………………………………………………………………………………………………….. 86

Подключение надстройки Power Pivot……………………………………………………………………………………… 87

Краткий обзор надстройки Power Pivot……………………………………………………………………………………. 88

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

Упражнения………………………………………………………………………………………………………………………………… 90

Глава 7. Создание реляционной модели данных в Power Pivot………………. 91

Подключение данных к Power Pivot…………………………………………………………………………………………. 91

Создание взаимосвязей между таблицами………………………………………………………………………………. 92

Таблицы фактов и таблицы измерений……………………………………………………………………………………. 95

Упорядочивание диаграммы…………………………………………………………………………………………. 95

Редактирование связей…………………………………………………………………………………………………… 96

Загрузка результатов в Excel……………………………………………………………………………………………………. 97

Понятие кардинальности………………………………………………………………………………………………………… 100

Связь «один к одному»…………………………………………………………………………………………………. 100

Связь «один ко многим»……………………………………………………………………………………………….. 101

Связь «многие ко многим»……………………………………………………………………………………………. 102

Почему так важна кардинальность?…………………………………………………………………………… 102

Направление фильтрации……………………………………………………………………………………………………….. 103

Фильтрация orders через users…………………………………………………………………………………….. 104

Фильтрация users через orders…………………………………………………………………………………….. 105

Направление фильтрации и кардинальность…………………………………………………………….. 105

От теории к практике……………………………………………………………………………………………………. 106

Создание вычисляемых столбцов в Power Pivot……………………………………………………………………. 106

Вычисления в Power Query или в Power Pivot?……………………………………………………………. 106

Пример: расчет нормы прибыли…………………………………………………………………………………. 107

Замена значений в столбце с помощью SWITCH()…………………………………………………….. 108

Создание иерархий и работа с ними……………………………………………………………………………………… 110

Создание иерархии в Power Pivot………………………………………………………………………………… 110

Использование иерархии в сводной таблице…………………………………………………………….. 111

Загрузка модели данных в Power BI………………………………………………………………………………………. 112

Power BI как третий инструмент «современного Excel»……………………………………………. 112

Импорт модели данных в Power BI……………………………………………………………………………… 113

Просмотр данных в Power BI………………………………………………………………………………………. 115

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

Упражнения……………………………………………………………………………………………………………………………… 116

Глава 8. Создание мер DAX и показателей KPI в Power Pivot………………. 118

Создание мер DAX…………………………………………………………………………………………………………………… 118

Создание неявных мер…………………………………………………………………………………………………. 118

Создание явных мер……………………………………………………………………………………………………… 120

Создание показателей KPI……………………………………………………………………………………………………… 124

Настройка стилей значков…………………………………………………………………………………………… 127

Добавление показателя KPI в сводную таблицу……………………………………………………….. 127

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

Упражнения……………………………………………………………………………………………………………………………… 128

Глава 9. Функции DAX в Power Pivot…………………………………………………… 130

Функция CALCULATE()……………………………………………………………………………………………………………. 130

Контекст фильтра…………………………………………………………………………………………………………. 130

Функция CALCULATE() с одним условием…………………………………………………………………. 131

Функция CALCULATE() с несколькими условиями…………………………………………………….. 132

Условие И……………………………………………………………………………………………………………… 132

Условие ИЛИ………………………………………………………………………………………………………… 132

Функция CALCULATE() с условием ALL()…………………………………………………………………… 132

Функции аналитики времени………………………………………………………………………………………………….. 135

Добавление таблицы дат…………………………………………………………………………………………….. 136

Создание базовых мер для аналитики времени…………………………………………………………. 137

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

Упражнения……………………………………………………………………………………………………………………………… 141

Часть III. Инструменты аналитики в Excel……………………….. 143

Глава 10. Введение в функции динамических массивов………………………. 145

Функции динамических массивов………………………………………………………………………………………….. 145

Что такое массив в Excel?…………………………………………………………………………………………….. 145

Ссылки на массивы………………………………………………………………………………………………………. 146

Ссылки на статические массивы………………………………………………………………………… 146

Ссылки на динамические массивы……………………………………………………………………… 147

Формулы массива…………………………………………………………………………………………………………. 147

Формулы статического массива…………………………………………………………………………. 147

Функции динамического массива……………………………………………………………………….. 149

Использование функций динамического массива………………………………………………………………… 149

Поиск уникальных и неповторяющихся значений
с помощью функции UNIQUE()……………………………………………………………………………………. 150

Разница между уникальными и отличающимися значениями…………………………………. 150

Использование оператора динамического диапазона……………………………………………… 151

Фильтрация записей с помощью функции FILTER()……………………………………………………………… 152

Добавление заголовков столбцов……………………………………………………………………………….. 153

Фильтрация по нескольким условиям…………………………………………………………………………. 154

Условие И……………………………………………………………………………………………………………… 154

Условие ИЛИ………………………………………………………………………………………………………… 154

Вложенные условия И/ИЛИ………………………………………………………………………………… 154

Сортировка с помощью функции SORTBY()…………………………………………………………………………… 154

Сортировка по нескольким диапазонам…………………………………………………………………….. 155

Сортировка без включения столбца сортировки в результат………………………………….. 156

Современный поиск с помощью функции XLOOKUP()…………………………………………………………. 156

Сравнение функций XLOOKUP() и VLOOKUP()…………………………………………………………. 157

Базовые возможности функции XLOOKUP()……………………………………………………………… 158

Обработка ошибок с помощью функции XLOOKUP()………………………………………………. 158

Функция XLOOKUP() и столбцы слева………………………………………………………………………. 159

Другие функции динамического массива………………………………………………………………………………. 159

Динамические массивы и современный Excel……………………………………………………………………….. 160

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

Упражнения……………………………………………………………………………………………………………………………… 161

Глава 11. Дополненная аналитика и будущее Excel……………………………… 162

Растущая сложность данных и аналитики……………………………………………………………………………. 162

Excel и self-service BI-системы………………………………………………………………………………………………… 163

Excel для дополненной аналитики…………………………………………………………………………………………. 164

Использование Analyze Data для получения результатов, сгенерированных ИИ…………….. 164

Построение статистических моделей с помощью XLMiner…………………………………………………. 168

Чтение данных с изображения……………………………………………………………………………………………….. 171

Анализ настроений с помощью Azure Machine Learning……………………………………………………… 173

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

Упражнения……………………………………………………………………………………………………………………………… 177

Глава 12. Python и Excel……………………………………………………………………….. 178

Предварительные требования………………………………………………………………………………………………… 178

Роль Python в современном Excel…………………………………………………………………………………………… 179

«Клей» для огромного набора инструментов…………………………………………………………….. 179

Сетевой эффект сокращает время разработки…………………………………………………………… 180

Добавьте современные технологии к Excel………………………………………………………………… 180

Модульное тестирование……………………………………………………………………………………. 180

Системы контроля версий……………………………………………………………………………………. 181

Разработка пакетов и их распространение……………………………………………………….. 181

Совмещение Python и Excel с помощью пакетов pandas и openpyxl………………………… 182

Зачем нужен pandas для работы с Excel?………………………………………………………….. 182

Ограничения при работе с pandas………………………………………………………………………. 182

Что умеет openpyxl?…………………………………………………………………………………………….. 182

Использование openpyxl вместе с pandas…………………………………………………………… 183

Другие пакеты Python для Excel………………………………………………………………………………….. 183

Пример автоматизации Excel с помощью pandas и openpyxl………………………………………………. 184

Очистка данных с помощью pandas…………………………………………………………………………… 185

Работа с метаданными………………………………………………………………………………………… 186

Поиск по шаблону и регулярные выражения…………………………………………………….. 186

Обработка отсутствующих значений………………………………………………………………… 187

Процентильное ранжирование……………………………………………………………………………. 188

Создание отчета с помощью openpyxl……………………………………………………………………….. 189

Создание рабочего листа для отчета…………………………………………………………………. 189

Вставка диаграмм………………………………………………………………………………………………… 190

Способ 1: создание диаграммы Excel…………………………………………………………… 190

Способ 2: вставка изображения из Python…………………………………………………… 191

Диаграммы Excel и Python…………………………………………………………………………………… 193

Добавление стилизованной таблицы…………………………………………………………………………. 194

Изменение формата на проценты……………………………………………………………………….. 194

Преобразование в таблицу Excel………………………………………………………………………… 194

Применение условного форматирования…………………………………………………………… 195

Автоподбор ширины столбцов……………………………………………………………………………. 195

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

Упражнения……………………………………………………………………………………………………………………………… 196

Глава 13. Заключение и дальнейшие шаги…………………………………………… 197

Другие функциональности Excel……………………………………………………………………………………………. 197

Функции LET() и LAMBDA()…………………………………………………………………………………………. 197

Power Automate, сценарии Office и Excel Online………………………………………………………… 198

Дальнейшее изучение Power Query и Power Pivot………………………………………………………………….. 199

Power Query и M……………………………………………………………………………………………………………. 199

Power Pivot и DAX…………………………………………………………………………………………………………. 200

Power BI для информационных панелей и отчетов…………………………………………………… 201

Azure и облачные вычисления………………………………………………………………………………………………… 201

Программирование на Python………………………………………………………………………………………………… 202

Большие языковые модели и инженерия запросов……………………………………………………………….. 202

Напутствие……………………………………………………………………………………………………………………………….. 203

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

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

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

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

Встречайте: “Основы JetPack Compose: Разработка приложений для Android с помощью Jetpack Compose, Android Studio и Kotlin”

Основы JetPack Compose: Разработка приложений для Android с помощью Jetpack Compose, Android Studio и Kotlin

Книга посвящена практическому применению Jetpack Compose — современного декларативного фреймворка для создания пользовательских интерфейсов в Android-приложениях. Показаны основы языка Kotlin, от базовых конструкций до сопрограмм и объектно-ориентированного программирования. Рассматриваются ключевые концепции Compose 1.6, включая построение пользовательских интерфейсов с помощью Composable-функций, управление состоянием, навигация, анимационные эффекты, и архитектура приложений. Отдельное внимание уделено работе с базами данных SQLite и библиотекой Room, биометрической аутентификации, встроенным покупкам, использованию карт Google Maps и публикации приложений в Google Play.
В книге представлены практические примеры и подробные пошаговые инструкции по работе в Android Studio Iguana и использованию возможностей Material Design 3.

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

Практическое руководство по созданию Android-приложений с использованием Jetpack Compose 1.6, Android Studio Iguana и Material Design 3.

Jetpack Compose — это современный декларативный фреймворк для разработки пользовательских интерфейсов в Android-приложениях, полностью основанный на языке Kotlin. С его помощью вы сможете создавать гибкие, масштабируемые и визуально привлекательные приложения с минимальными усилиями.

Эта книга — практическое руководство по созданию Android-приложений с использованием Jetpack Compose 1.6Android Studio Iguana и Material Design 3. Подробно рассматриваются ключевые концепции фреймворка, включая компоненты интерфейса, управление состоянием, модификаторы, навигация и анимационные эффекты.

Особое внимание уделено архитектуре проектов и современным подходам к построению пользовательского интерфейса на основе Composable-функций.

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

  • Начинающие Android-разработчики
  • Программисты, переходящие на Jetpack Compose
  • Те, кто хочет освоить современные подходы в создании мобильных приложений

Формат обучения:

  • Теория + практика
  • Пошаговые задания с готовым кодом
  • Реальные примеры и лучшие практики

Что внутри книги?

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

  • Компоненты интерфейса
  • Управление состоянием
  • Модификаторы
  • Навигация
  • Анимации
  • Архитектура приложений и работа с Composable-функциями

Дополнительные технологии:

  • Kotlin (от основ до корутин и ООП)
  • Работа с данными: SQLite, Room
  • Биометрическая аутентификация
  • Интеграция Google Maps
  • Публикация в Google Play

Книгу “Основы JetPack Compose: Разработка приложений для Android с помощью Jetpack Compose, Android Studio и Kotlin” можно купить в нашем интенет-магазине.

Глава 1. Начало……………………………………………………………………………………… 22

1.1. Для Kotlin-программистов………………………………………………………………………………………………….. 23

1.2. Для новых Kotlin-программистов………………………………………………………………………………………. 23

1.3. Загрузка примеров кода……………………………………………………………………………………………………… 23

Глава 2. Настройка среды разработки Android Studio…………………………….. 24

2.1. Системные требования……………………………………………………………………………………………………….. 24

2.2. Загрузка пакета Android Studio………………………………………………………………………………………….. 24

2.3. Установка Android Studio…………………………………………………………………………………………………… 25

2.3.1. Установка в Windows……………………………………………………………………………………………….. 25

2.3.2. Установка в macOS………………………………………………………………………………………………….. 25

2.3.3. Установка в Linux…………………………………………………………………………………………………….. 26

2.4. Мастер установки Android Studio……………………………………………………………………………………… 26

2.5. Установка дополнительных пакетов Android SDK………………………………………………………….. 29

2.6. Установка инструментов командной строки Android SDK……………………………………………… 32

2.6.1. Windows 8.1……………………………………………………………………………………………………………….. 33

2.6.2. Windows 10………………………………………………………………………………………………………………… 34

2.6.3. Windows 11………………………………………………………………………………………………………………… 34

2.6.4. Linux………………………………………………………………………………………………………………………….. 34

2.6.5. macOS………………………………………………………………………………………………………………………… 34

2.7. Управлению памятью Android Studio………………………………………………………………………………… 35

2.8. Обновление Android Studio и SDK……………………………………………………………………………………… 36

2.9. Заключение………………………………………………………………………………………………………………………….. 36

Глава 3. Обзор Compose-проекта……………………………………………………………. 37

3.1. О проекте……………………………………………………………………………………………………………………………… 37

3.2. Создание проекта……………………………………………………………………………………………………………….. 37

3.3. Создание активити……………………………………………………………………………………………………………… 39

3.4. Определение параметров проекта и настроек для SDK………………………………………………….. 39

3.5. Включение нового UI-интерфейса в проект Android Studio…………………………………………….. 41

3.6. Предварительный просмотр тестового проекта………………………………………………………………. 42

3.7. Обзор главной активити……………………………………………………………………………………………………… 46

3.8. Предварительный просмотр обновлений…………………………………………………………………………. 50

3.9. Список материалов и версия Compose……………………………………………………………………………… 51

3.10. Заключение……………………………………………………………………………………………………………………….. 52

Глава 4. Пример Compose-проекта…………………………………………………………. 53

4.1. Начало работы……………………………………………………………………………………………………………………. 53

4.2. Удаление кода шаблона…………………………………………………………………………………………………….. 53

4.3. Иерархия компонуемых функций………………………………………………………………………………………. 54

4.4. Добавление компонуемой функции DemoText…………………………………………………………………. 54

4.5. Предварительный просмотр компонуемой функции DemoText……………………………………… 56

4.6. Добавление компонуемой функции DemoSlider……………………………………………………………….. 57

4.7. Добавление компонуемой функции DemoScreen……………………………………………………………… 58

4.8. Предварительный просмотр компонуемой функции DemoScreen………………………………….. 60

4.9. Настройка параметров предварительного просмотра……………………………………………………. 61

4.10. Тестирование в интерактивном режиме………………………………………………………………………….. 62

4.11. Завершение проекта…………………………………………………………………………………………………………. 62

4.12. Заключение……………………………………………………………………………………………………………………….. 63

Глава 5. Создание виртуального Android-устройства в Android Studio……. 64

5.1. О виртуальных устройствах Android………………………………………………………………………………… 64

5.2. Запуск эмулятора……………………………………………………………………………………………………………….. 66

5.3. Запуск приложения в AVD…………………………………………………………………………………………………. 68

5.4. Обновления в реальном времени с помощью Live Edit……………………………………………………. 69

5.5. Запуск на нескольких устройствах…………………………………………………………………………………… 71

5.6. Остановка работающего приложения………………………………………………………………………………. 72

5.7. Поддержка темной темы…………………………………………………………………………………………………….. 73

5.8. Запуск эмулятора в отдельном окне…………………………………………………………………………………. 74

5.9. Отключение рамки устройства………………………………………………………………………………………….. 76

5.10. Заключение……………………………………………………………………………………………………………………….. 78

Глава 6. Использование и настройка эмулятора для AVD в Android Studio 79

6.1. Среда эмулятора…………………………………………………………………………………………………………………. 79

6.2. Панель инструментов эмулятора………………………………………………………………………………………. 80

6.3. Работа в режиме масштабирования………………………………………………………………………………….. 81

6.4. Изменение размера окна эмулятора………………………………………………………………………………….. 82

6.5. Расширенные возможности управления…………………………………………………………………………… 82

6.5.1. Location (местоположение)……………………………………………………………………………………… 83

6.5.2. Displays (дисплеи)…………………………………………………………………………………………………….. 83

6.5.3. Cellular (сотовая связь)……………………………………………………………………………………………… 83

6.5.4. Battery (аккумулятор)………………………………………………………………………………………………. 83

6.5.5. Camera (камера)……………………………………………………………………………………………………….. 83

6.5.6. Phone (телефон)………………………………………………………………………………………………………… 83

6.5.7. Directional Pad (навигационная панель)…………………………………………………………………. 84

6.5.8. Microphone (микрофон)……………………………………………………………………………………………. 84

6.5.9. Fingerprint (отпечаток пальца)…………………………………………………………………………………. 84

6.5.10. Virtual Sensors (виртуальные датчики)…………………………………………………………………. 84

6.5.11. Snapshots (снимки)………………………………………………………………………………………………….. 84

6.5.12. Record and Playback (запись и воспроизведение)………………………………………………… 84

6.5.13. Google Play………………………………………………………………………………………………………………. 84

6.5.14. Settings (настройки)………………………………………………………………………………………………… 85

6.5.15. Help (помощь)…………………………………………………………………………………………………………. 85

6.6. Работа со снимками……………………………………………………………………………………………………………. 85

6.7. Настройка эмуляции отпечатков пальцев………………………………………………………………………… 85

6.8. Эмулятор в режиме окна инструментов……………………………………………………………………………. 88

6.9. Создание эмулятора с изменяемым размером………………………………………………………………….. 88

6.10. Заключение……………………………………………………………………………………………………………………….. 89

Глава 7. Обзор пользовательского интерфейса Android Studio……………….. 90

7.1. Экран приветствия………………………………………………………………………………………………………………. 90

7.2. Строка меню………………………………………………………………………………………………………………………… 91

7.3. Главное окно……………………………………………………………………………………………………………………….. 92

7.4. Окна инструментов……………………………………………………………………………………………………………… 94

7.5. Меню окон инструментов…………………………………………………………………………………………………… 97

7.6. Сочетания клавиш………………………………………………………………………………………………………………. 98

7.7. Навигация по Switcher и Recent Files…………………………………………………………………………………. 98

7.8. Изменение темы Android Studio……………………………………………………………………………………….. 100

7.9. Заключение……………………………………………………………………………………………………………………….. 101

Глава 8. Тестирование приложений на физическом Android-устройстве. 102

8.1. Обзор Android Debug Bridge (ADB)………………………………………………………………………………….. 102

8.2. Включение отладки ADB по USB на устройствах Android…………………………………………… 102

8.2.1. Конфигурация ADB на macOS………………………………………………………………………………. 104

8.2.2. Конфигурация ADB на Windows…………………………………………………………………………… 104

8.2.3. Конфигурация ADB на Linux………………………………………………………………………………… 105

8.3. Устранение проблем с USB-подключением……………………………………………………………………. 106

8.4. Включение беспроводной отладки на устройствах Android………………………………………… 106

8.5. Тестирование соединения adb…………………………………………………………………………………………. 109

8.6. Зеркалирование устройств………………………………………………………………………………………………. 110

8.7. Заключение……………………………………………………………………………………………………………………….. 110

Глава 9. Основы редактора кода Android Studio…………………………………… 111

9.1. Редактор кода Android Studio…………………………………………………………………………………………… 111

9.2. Разделение окна редактора……………………………………………………………………………………………… 114

9.3. Автозавершение кода……………………………………………………………………………………………………….. 115

9.4. Автозавершение операторов……………………………………………………………………………………………. 117

9.5. Информация о параметрах………………………………………………………………………………………………. 117

9.6. Подсказки имен параметров…………………………………………………………………………………………….. 118

9.7. Генерация кода…………………………………………………………………………………………………………………. 118

9.8. Сокрытие кода…………………………………………………………………………………………………………………… 119

9.9. Быстрый поиск документации…………………………………………………………………………………………. 121

9.10. Переформатирование кода…………………………………………………………………………………………….. 121

9.11. Поиск примера кода……………………………………………………………………………………………………….. 123

9.12. Живые шаблоны……………………………………………………………………………………………………………… 123

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

Глава 10. Обзор архитектуры Android………………………………………………….. 125

10.1. Программный стек Android…………………………………………………………………………………………….. 125

10.2. Ядро Linux……………………………………………………………………………………………………………………….. 126

10.3. Слой аппаратной абстракции……………………………………………………………………………………….. 126

10.4. Android Runtime — ART…………………………………………………………………………………………………. 126

10.5. Библиотеки Android………………………………………………………………………………………………………… 127

10.5.1. Библиотеки C/C++………………………………………………………………………………………………. 128

10.6. Фреймворк приложений…………………………………………………………………………………………………. 128

10.7. Приложения…………………………………………………………………………………………………………………….. 129

10.8. Заключение……………………………………………………………………………………………………………………… 129

Глава 11. Введение в Kotlin………………………………………………………………….. 130

11.1. Что такое Kotlin?……………………………………………………………………………………………………………… 130

11.2. Kotlin и Java…………………………………………………………………………………………………………………….. 130

11.3. Преобразование из Java в Kotlin……………………………………………………………………………………. 131

11.4. Kotlin и Android Studio…………………………………………………………………………………………………….. 131

11.5. Эксперименты с Kotlin……………………………………………………………………………………………………. 131

11.6. Точки с запятой в Kotlin………………………………………………………………………………………………….. 132

11.7. Заключение……………………………………………………………………………………………………………………… 133

Глава 12. Типы данных и переменные в Kotlin…………………………………….. 134

12.1. Типы данных Kotlin………………………………………………………………………………………………………… 134

12.1.1. Целочисленные типы данных……………………………………………………………………………. 135

12.1.2. Типы данных с плавающей точкой…………………………………………………………………… 135

12.1.3. Тип данных Boolean…………………………………………………………………………………………… 135

12.1.4. Символьный тип данных……………………………………………………………………………………. 136

12.1.5. Тип данных String……………………………………………………………………………………………….. 136

12.1.6. Экранированные последовательности…………………………………………………………….. 137

12.2. Изменяемые переменные………………………………………………………………………………………………… 137

12.3. Неизменяемые переменные……………………………………………………………………………………………. 138

12.4. Объявление изменяемых и неизменяемых переменных……………………………………………….. 138

12.5. Типы данных являются объектами……………………………………………………………………………….. 139

12.6. Аннотации типов и вывод типов……………………………………………………………………………………. 139

12.7. Nullable-типы…………………………………………………………………………………………………………………… 140

12.8. Оператор безопасного вызова……………………………………………………………………………………….. 141

12.9. Ненулевые утверждения………………………………………………………………………………………………… 142

12.10. Nullable-типы и функция let………………………………………………………………………………………….. 142

12.11. Поздняя инициализация (lateinit)…………………………………………………………………………………. 144

12.12. Оператор Элвиса………………………………………………………………………………………………………….. 144

12.13. Приведение типов и проверка типов…………………………………………………………………………… 145

12.14. Заключение……………………………………………………………………………………………………………………. 145

Глава 13. Операторы и выражения в Kotlin………………………………………….. 146

13.1. Синтаксис выражений в Kotlin………………………………………………………………………………………. 146

13.2. Базовый оператор присваивания………………………………………………………………………………….. 146

13.3. Арифметические операторы в Kotlin…………………………………………………………………………….. 147

13.4. Расширенные операторы присваивания………………………………………………………………………. 147

13.5. Операторы инкремента и декремента…………………………………………………………………………… 148

13.6. Операторы равенства…………………………………………………………………………………………………….. 148

13.7. Булевы логические операторы………………………………………………………………………………………. 149

13.8. Оператор диапазона………………………………………………………………………………………………………. 150

13.9. Поразрядные операторы………………………………………………………………………………………………… 150

13.9.1. Поразрядная инверсия……………………………………………………………………………………….. 151

13.9.2. Поразрядное «И»………………………………………………………………………………………………… 151

13.9.3. Поразрядное «ИЛИ»…………………………………………………………………………………………… 151

13.9.4. Побитовое исключающее «ИЛИ»……………………………………………………………………… 152

13.9.5. Поразрядный сдвиг влево………………………………………………………………………………….. 152

13.9.6. Поразрядный сдвиг вправо………………………………………………………………………………… 153

13.10. Заключение……………………………………………………………………………………………………………………. 153

Глава 14. Управление потоком в Kotlin………………………………………………… 154

14.1. Циклический поток управления…………………………………………………………………………………….. 154

14.1.1. Оператор for-in в Kotlin………………………………………………………………………………………. 154

14.1.2. Цикл while……………………………………………………………………………………………………………. 156

14.1.3. Цикл do… while…………………………………………………………………………………………………….. 156

14.1.4. Выход из циклов…………………………………………………………………………………………………. 157

14.1.5. Оператор continue………………………………………………………………………………………………. 157

14.1.6. Метки break и continue……………………………………………………………………………………….. 158

14.2. Условный поток управления………………………………………………………………………………………….. 159

14.2.1. Выражения if………………………………………………………………………………………………………. 159

14.2.2. Выражения if… else……………………………………………………………………………………………… 160

14.2.3. Выражения if… else if………………………………………………………………………………………….. 160

14.2.4. Оператор when……………………………………………………………………………………………………. 161

14.3. Заключение……………………………………………………………………………………………………………………… 161

Глава 15. Обзор функций и лямбда-выражений в Kotlin………………………. 162

15.1. Что такое функция?…………………………………………………………………………………………………………. 162

15.2. Как объявить функцию Kotlin………………………………………………………………………………………… 162

15.3. Вызов функции Kotlin……………………………………………………………………………………………………… 163

15.4. Функции с одним выражением………………………………………………………………………………………. 163

15.5. Локальные функции………………………………………………………………………………………………………… 164

15.6. Обработка возвращаемых значений…………………………………………………………………………….. 164

15.7. Объявление параметров функции по умолчанию………………………………………………………… 164

15.8. Переменное число параметров функции………………………………………………………………………. 165

15.9. Лямбда-выражения…………………………………………………………………………………………………………. 166

15.10. Функции высшего порядка…………………………………………………………………………………………… 167

15.11. Заключение……………………………………………………………………………………………………………………. 168

Глава 16. Основы объектно-ориентированного программирования
в Kotlin…………………………………………………………………………………………………. 169

16.1. Что такое объект?……………………………………………………………………………………………………………. 169

16.2. Что такое класс?……………………………………………………………………………………………………………… 169

16.3. Объявление класса в Kotlin…………………………………………………………………………………………….. 169

16.4. Добавление свойств в класс…………………………………………………………………………………………… 170

16.5. Определение методов……………………………………………………………………………………………………… 170

16.6. Объявление и инициализация экземпляра класса……………………………………………………….. 171

16.7. Главные и вторичные конструкторы…………………………………………………………………………….. 171

16.8. Блоки инициализаторов…………………………………………………………………………………………………. 173

16.9. Вызов методов и доступ к свойствам……………………………………………………………………………. 174

16.10. Пользовательские аксессоры………………………………………………………………………………………. 174

16.11. Вложенные и внутренние классы………………………………………………………………………………… 175

16.12. Объекты-компаньоны…………………………………………………………………………………………………… 176

16.13. Заключение……………………………………………………………………………………………………………………. 178

Глава 17. Введение в наследование и подклассы в Kotlin…………………….. 179

17.1. Наследование, классы и подклассы……………………………………………………………………………… 179

17.2. Синтаксис подклассов……………………………………………………………………………………………………. 179

17.3. Пример наследования в Kotlin……………………………………………………………………………………….. 181

17.4. Расширение функционала подкласса…………………………………………………………………………… 182

17.5. Переопределение унаследованных методов………………………………………………………………… 182

17.6. Добавление пользовательского вторичного конструктора………………………………………… 184

17.7. Использование класса SavingsAccount…………………………………………………………………………. 184

17.8. Заключение……………………………………………………………………………………………………………………… 185

Глава 18. Обзор Compose……………………………………………………………………… 186

18.1. Разработка до Compose…………………………………………………………………………………………………. 186

18.2. Декларативный синтаксис Compose…………………………………………………………………………….. 187

18.3. Compose, управляемый данными………………………………………………………………………………….. 187

18.4. Заключение……………………………………………………………………………………………………………………… 188

Глава 19. Руководство по каталогам версий Gradle……………………………… 189

19.1. Зависимости библиотек и плагинов………………………………………………………………………………. 189

19.2. Файл сборки пакета в Gradle………………………………………………………………………………………….. 189

19.3. Файлы сборки модуля в Gradle………………………………………………………………………………………. 190

19.4. Файл version catalog………………………………………………………………………………………………………… 190

19.5. Добавление зависимостей……………………………………………………………………………………………… 192

19.6. Обновления библиотек…………………………………………………………………………………………………… 193

19.7. Заключение……………………………………………………………………………………………………………………… 193

Глава 20. Обзор компонуемых функций………………………………………………. 194

20.1. Что такое компонуемая функция?…………………………………………………………………………………. 194

20.2. Компонуемые функции с сохранением и без сохранения состояния…………………………. 194

20.3. Синтаксис компонуемой функции…………………………………………………………………………………. 195

20.4. Компонуемые функции Foundation и Material……………………………………………………………… 197

20.5. Заключение……………………………………………………………………………………………………………………… 199

Глава 21. Обзор состояния и рекомпозиции в Compose………………………… 200

21.1. Основы состояния…………………………………………………………………………………………………………… 200

21.2. Знакомство с рекомпозицией…………………………………………………………………………………………. 200

21.3. Создание проекта StateExample……………………………………………………………………………………. 201

21.4. Объявление состояния в компонуемой функции………………………………………………………….. 201

21.5. Однонаправленный поток данных………………………………………………………………………………… 205

21.6. Подъем состояния…………………………………………………………………………………………………………… 207

21.7. Сохранение состояния через изменения конфигурации……………………………………………… 210

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

Глава 22. Введение в Composition Local………………………………………………… 213

22.1. Понимание CompositionLocal………………………………………………………………………………………… 213

22.2. Использование CompositionLocal………………………………………………………………………………….. 215

22.3. Создание проекта CompLocalDemo……………………………………………………………………………… 215

22.4. Разработка макета………………………………………………………………………………………………………….. 216

22.5. Добавление состояния CompositionLocal…………………………………………………………………….. 217

22.6. Доступ к состоянию CompositionLocal…………………………………………………………………………. 218

22.7. Тестирование дизайна……………………………………………………………………………………………………. 218

22.8. Заключение……………………………………………………………………………………………………………………… 220

Глава 23. Обзор API-слотов в Compose…………………………………………………. 221

23.1. Понимание API-слотов…………………………………………………………………………………………………… 221

23.2. Объявление API-слота……………………………………………………………………………………………………. 222

23.3. Вызов компонуемых API-слотов……………………………………………………………………………………. 223

23.4. Заключение……………………………………………………………………………………………………………………… 224

Глава 24. Пособие по API-слотам в Compose………………………………………… 225

24.1. О проекте…………………………………………………………………………………………………………………………. 225

24.2. Создание проекта SlotApiDemo…………………………………………………………………………………….. 225

24.3. Подготовка файла для класса MainActivity…………………………………………………………………. 225

24.4. Создание компонуемой функции MainScreen………………………………………………………………. 226

24.5. Добавление компонуемой функции ScreenContent………………………………………………………. 227

24.6. Создание компонуемой функции Checkbox…………………………………………………………………. 228

24.7. Реализация API-слотов в ScreenContent……………………………………………………………………….. 229

24.8. Добавление ресурса рисования изображения……………………………………………………………… 231

24.9. Кодирование компонуемой функции TitleImage………………………………………………………….. 233

24.10. Заполнение компонуемой функции MainScreen…………………………………………………………. 233

24.11. Предварительный просмотр проекта………………………………………………………………………….. 235

24.12. Заключение……………………………………………………………………………………………………………………. 237

Глава 25. Использование модификаторов в Compose……………………………. 238

25.1. Обзор модификаторов…………………………………………………………………………………………………….. 238

25.2. Создание проекта ModifierDemo…………………………………………………………………………………… 239

25.3. Создание модификатора………………………………………………………………………………………………… 240

25.4. Порядок модификаторов………………………………………………………………………………………………… 241

25.5. Добавление поддержки модификаторов в компонуемую функцию…………………………… 242

25.6. Общие встроенные модификаторы……………………………………………………………………………….. 246

25.7. Объединение модификаторов………………………………………………………………………………………… 246

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

Глава 26. Аннотированные строки и стили инструмента Brush……………. 248

26.1. Что такое аннотированные строки?……………………………………………………………………………… 248

26.2. Использование аннотированных строк………………………………………………………………………… 248

26.3. Стилизация текста с помощью инструмента Brush……………………………………………………… 249

26.4. Создание проекта для демонстрации……………………………………………………………………………. 250

26.5. Пример аннотированной строки SpanStyle………………………………………………………………….. 250

26.6. Пример аннотированной строки ParagraphStyle………………………………………………………….. 252

26.7. Пример стиля Brush………………………………………………………………………………………………………… 254

26.8. Заключение……………………………………………………………………………………………………………………… 256

Глава 27. Создание макетов с помощью компонуемых функций Row и Column   257

27.1. Создание проекта RowColDemo……………………………………………………………………………………. 257

27.2. Компонуемая функция Row……………………………………………………………………………………………. 258

27.3. Компонуемая функция Column……………………………………………………………………………………… 259

27.4. Объединение компонуемых функций Row и Column…………………………………………………… 259

27.5. Выравнивание макета…………………………………………………………………………………………………….. 260

27.6. Позиционирование макета…………………………………………………………………………………………….. 263

27.7. Интервал между расположениями макета……………………………………………………………………. 265

27.8. Модификаторы области действия для компонентов Row и Column………………………….. 266

27.9. Веса модификаторов области действия……………………………………………………………………….. 270

27.10. Заключение……………………………………………………………………………………………………………………. 271

Глава 28. Макеты компонента Box в Compose……………………………………… 272

28.1. Введение в компонуемую функцию Box……………………………………………………………………….. 272

28.2. Создание проекта BoxLayout………………………………………………………………………………………… 272

28.3. Добавление компонуемой функции TextCell………………………………………………………………… 273

28.4. Добавление макета Box…………………………………………………………………………………………………. 273

28.5. Выравнивание в Box………………………………………………………………………………………………………. 274

28.6. Модификаторы области действия BoxScope……………………………………………………………….. 276

28.7. Использование модификатора clip………………………………………………………………………………… 277

28.8. Заключение……………………………………………………………………………………………………………………… 278

Глава 29. Введение в FlowRow и FlowColumn……………………………………….. 279

29.1. Компонуемые функции FlowColumn и FlowRow………………………………………………………….. 279

29.2. Максимальное количество элементов………………………………………………………………………….. 280

29.3. Работа с расположением главной оси………………………………………………………………………….. 281

29.4. Понимание поперечного расположения по осям…………………………………………………………. 282

29.5. Выравнивание элементов………………………………………………………………………………………………. 282

29.6. Управление размером элемента……………………………………………………………………………………. 283

29.7. Заключение……………………………………………………………………………………………………………………… 284

Глава 30. Руководство по FlowRow и FlowColumn………………………………… 285

30.1. Создание проекта FlowLayoutDemo……………………………………………………………………………… 285

30.2. Генерация случайных значений для высоты и цвета………………………………………………….. 286

30.3. Добавление компонуемой функции Box……………………………………………………………………….. 287

30.4. Изменение расположения макета Flow…………………………………………………………………………. 288

30.5. Изменение выравнивания элементов…………………………………………………………………………….. 289

30.6. Переключение на FlowColumn………………………………………………………………………………………. 290

30.7. Использование перекрестного расположения……………………………………………………………… 291

30.8. Добавление весов для элементов…………………………………………………………………………………… 292

30.9. Заключение……………………………………………………………………………………………………………………… 293

Глава 31. Пользовательские модификаторы макета…………………………….. 294

31.1. Основы компоновки макета в Compose………………………………………………………………………… 294

31.2. Пользовательские макеты………………………………………………………………………………………………. 295

31.3. Создание проекта LayoutModifier…………………………………………………………………………………. 295

31.4. Добавление компонуемой функции ColorBox………………………………………………………………. 295

31.5. Создание пользовательского модификатора макета…………………………………………………… 296

31.6. Понимание позиции по умолчанию………………………………………………………………………………. 297

31.7. Завершение модификатора макета……………………………………………………………………………….. 297

31.8. Использование пользовательского модификатора……………………………………………………… 299

31.9. Работа с линиями выравнивания…………………………………………………………………………………… 299

31.10. Работа с базовыми линиями………………………………………………………………………………………… 302

31.11. Заключение……………………………………………………………………………………………………………………. 303

Глава 32. Создание пользовательских макетов…………………………………….. 304

32.1. Обзор пользовательских макетов………………………………………………………………………………….. 304

32.2. Синтаксис пользовательского макета…………………………………………………………………………… 304

32.3. Использование пользовательского макета…………………………………………………………………… 306

32.4. Создание проекта CustomLayout………………………………………………………………………………….. 306

32.5. Создание компонуемой функции CascadeLayout………………………………………………………… 307

32.6. Использование компонуемой функции CascadeLayout………………………………………………. 309

32.7. Заключение……………………………………………………………………………………………………………………… 310

Глава 33. Руководство по ConstraintLayout в Compose…………………………. 311

33.1. Введение в ConstraintLayout………………………………………………………………………………………….. 311

33.2. Как работает ConstraintLayout……………………………………………………………………………………… 311

33.2.1. Ограничения……………………………………………………………………………………………………….. 312

33.2.2. Поля……………………………………………………………………………………………………………………… 312

33.2.3. Противоположные ограничения……………………………………………………………………….. 313

33.2.4. Смещение ограничений……………………………………………………………………………………… 313

33.2.5. Цепочки……………………………………………………………………………………………………………….. 314

33.2.6. Стили цепочки…………………………………………………………………………………………………….. 315

33.3. Настройка размеров……………………………………………………………………………………………………….. 316

33.4. Направляющие линии…………………………………………………………………………………………………….. 317

33.5. Барьеры……………………………………………………………………………………………………………………………. 317

33.6. Заключение……………………………………………………………………………………………………………………… 319

Глава 34. Работа с ConstraintLayout в Compose…………………………………….. 320

34.1. Вызов ConstraintLayout………………………………………………………………………………………………….. 320

34.2. Генерация ссылок…………………………………………………………………………………………………………… 320

34.3. Назначение ссылки на компонуемую функцию…………………………………………………………… 321

34.4. Добавление ограничений……………………………………………………………………………………………….. 321

34.5. Создание проекта ConstraintLayout……………………………………………………………………………… 322

34.6. Добавление библиотеки ConstraintLayout……………………………………………………………………. 322

34.7. Добавление пользовательской компонуемой функции button……………………………………. 323

34.8. Базовые ограничения……………………………………………………………………………………………………… 324

34.9. Противоположные ограничения……………………………………………………………………………………. 325

34.10. Смещение ограничений………………………………………………………………………………………………… 327

34.11. Ограничения полями…………………………………………………………………………………………………….. 327

34.12. Важность противоположных ограничений и смещений…………………………………………… 329

34.13. Создание цепочек…………………………………………………………………………………………………………. 332

34.14. Работа с направляющими линиями…………………………………………………………………………….. 333

34.15. Работа с барьерами………………………………………………………………………………………………………. 334

34.16. Наборы ограничений……………………………………………………………………………………………………. 338

34.17. Заключение……………………………………………………………………………………………………………………. 340

Глава 35. Работа с IntrinsicSize в Compose…………………………………………….. 341

35.1. Внутренние измерения……………………………………………………………………………………………………. 341

35.2. Измерение максимального и минимального внутреннего размера……………………………. 342

35.3. О проекте…………………………………………………………………………………………………………………………. 343

35.4. Создание проекта IntrinsicSizeDemo……………………………………………………………………………… 343

35.5. Создание пользовательского текстового поля…………………………………………………………….. 344

35.6. Добавление компонентов Text и Box……………………………………………………………………………. 344

35.7. Добавление столбца верхнего уровня………………………………………………………………………….. 345

35.8. Тестирование проекта……………………………………………………………………………………………………. 346

35.9. Применение измерений IntrinsicSize.Max……………………………………………………………………… 346

35.10. Применение измерений IntrinsicSize.Min…………………………………………………………………….. 347

35.11. Заключение……………………………………………………………………………………………………………………. 347

Глава 36. Корутины и LaunchedEffects в Jetpack Compose…………………….. 348

36.1. Что такое корутины?………………………………………………………………………………………………………. 348

36.2. Потоки против корутинов………………………………………………………………………………………………. 349

36.3. Область действия корутинов…………………………………………………………………………………………. 349

36.4. Функции приостановки…………………………………………………………………………………………………… 350

36.5. Диспетчеры корутинов…………………………………………………………………………………………………… 350

36.6. Конструкторы корутинов………………………………………………………………………………………………. 351

36.7. Job…………………………………………………………………………………………………………………………………….. 352

36.8. Приостановка и возобновление корутинов………………………………………………………………….. 352

36.9. Канал связи для корутинов……………………………………………………………………………………………. 354

36.10. Понимание побочных эффектов………………………………………………………………………………….. 354

36.11. Заключение……………………………………………………………………………………………………………………. 356

Глава 37. Обзор компонуемых функций List и Grid в Compose…………….. 357

37.1. Стандартные и ленивые списки…………………………………………………………………………………….. 357

37.2. Работа со списками Column и Row……………………………………………………………………………….. 358

37.3. Создание ленивых списков…………………………………………………………………………………………….. 358

37.4. Включение прокрутки с помощью ScrollState………………………………………………………………. 359

37.5. Программная прокрутка………………………………………………………………………………………………… 360

37.6. Липкие заголовки……………………………………………………………………………………………………………. 362

37.7. Создание ленивой сетки…………………………………………………………………………………………………. 364

37.8. Заключение……………………………………………………………………………………………………………………… 366

Глава 38. Руководство по спискам на основе Row и Column………………… 367

38.1. Создание проекта ListDemo…………………………………………………………………………………………… 367

38.2. Создание списка на основе Column………………………………………………………………………………. 367

38.3. Включение прокрутки списка………………………………………………………………………………………… 369

38.4. Ручная прокрутка……………………………………………………………………………………………………………. 370

38.5. Пример списка на основе Row……………………………………………………………………………………….. 372

38.6. Заключение……………………………………………………………………………………………………………………… 373

Глава 39. Руководство по ленивым спискам в Compose……………………….. 374

39.1. Создание проекта LazyListDemo…………………………………………………………………………………… 374

39.2. Добавление данных списка в проект…………………………………………………………………………….. 374

39.3. Чтение данных XML……………………………………………………………………………………………………….. 376

39.4. Обработка загрузки изображений…………………………………………………………………………………. 377

39.5. Проектирование компонуемой функции для элементов списка…………………………………. 380

39.6. Создание ленивого списка……………………………………………………………………………………………… 381

39.7. Тестирование проекта……………………………………………………………………………………………………. 382

39.8. Делаем элементы списка интерактивными…………………………………………………………………… 383

39.9. Заключение……………………………………………………………………………………………………………………… 385

Глава 40. Липкие заголовки и обнаружение прокрутки в ленивых списках 386

40.1. Группировка данных в элементах списка……………………………………………………………………. 386

40.2. Отображение заголовков и элементов………………………………………………………………………….. 386

40.3. Добавление липких заголовков……………………………………………………………………………………… 387

40.4. Реакция на изменение позиции прокрутки……………………………………………………………………. 389

40.5. Добавление кнопки прокрутки………………………………………………………………………………………. 390

40.6. Тестирование готового приложения……………………………………………………………………………… 392

40.7. Заключение……………………………………………………………………………………………………………………… 392

Глава 41. Руководство по ленивой неравномерной сетке в Compose…….. 393

41.1. Ленивые неравномерные сетки……………………………………………………………………………………… 393

41.2. Создание проекта StaggeredGridDemo………………………………………………………………………….. 395

41.3. Добавление компонуемой функции Box……………………………………………………………………….. 395

41.4. Генерация случайных значений высоты и цвета…………………………………………………………. 396

41.5. Создание неравномерного списка…………………………………………………………………………………. 397

41.6. Тестирование проекта……………………………………………………………………………………………………. 398

41.7. Переключение на горизонтальную неравномерную сетку…………………………………………. 398

41.8. Заключение……………………………………………………………………………………………………………………… 400

Глава 42. VerticalPager и HorizontalPager в Compose……………………………. 401

42.1. Компонуемая функция Pager………………………………………………………………………………………….. 401

42.2. Работа с состоянием пейджера……………………………………………………………………………………… 403

42.3. О проекте PagerDemo……………………………………………………………………………………………………… 404

42.4. Создание проекта PagerDemo………………………………………………………………………………………… 404

42.5. Добавление изображений с обложками книг……………………………………………………………….. 404

42.6. Добавление HorizontalPager…………………………………………………………………………………………… 405

42.7. Создание содержимого страницы…………………………………………………………………………………. 406

42.8. Тестирование пейджера…………………………………………………………………………………………………. 407

42.9. Добавление кнопок со стрелками………………………………………………………………………………….. 408

42.10. Заключение……………………………………………………………………………………………………………………. 411

Глава 43. Анимация в Compose…………………………………………………………….. 412

43.1. Создание проекта AnimateVisibility………………………………………………………………………………. 412

43.2. Анимация видимости………………………………………………………………………………………………………. 413

43.3. Определение анимаций входа и выхода………………………………………………………………………. 416

43.4. Спецификации и плавность анимации………………………………………………………………………….. 417

43.5. Повтор анимации……………………………………………………………………………………………………………. 419

43.6. Разные анимации для разных дочерних элементов…………………………………………………….. 419

43.7. Автозапуск анимации…………………………………………………………………………………………………….. 421

43.8. Реализация кроссфейдинга…………………………………………………………………………………………….. 422

43.9. Заключение……………………………………………………………………………………………………………………… 423

Глава 44. Анимация, основанная на состоянии……………………………………. 424

44.1. Понимание анимации, управляемой состоянием…………………………………………………………. 424

44.2. Знакомство с функциями «анимация как состояние»…………………………………………………… 424

44.3. Создание проекта AnimateState…………………………………………………………………………………….. 425

44.4. Анимация вращения с помощью animateFloatAsState…………………………………………………. 426

44.5. Анимация изменения цвета с помощью animateColorAsState…………………………………….. 429

44.6. Анимация движения с помощью animateDpAsState…………………………………………………….. 432

44.7. Добавление эффектов пружины…………………………………………………………………………………….. 435

44.8. Работа с ключевыми кадрами……………………………………………………………………………………….. 436

44.9. Объединение нескольких анимаций……………………………………………………………………………… 437

44.10. Использование инспектора анимации………………………………………………………………………… 440

44.11. Заключение……………………………………………………………………………………………………………………. 441

Глава 45. Рисование графики с помощью Canvas в Compose……………….. 442

45.1. Знакомство с компонентом Canvas……………………………………………………………………………….. 442

45.2. Создание проекта CanvasDemo…………………………………………………………………………………….. 442

45.3. Рисование линии и получение размера холста……………………………………………………………. 443

45.4. Рисование пунктирных линий……………………………………………………………………………………….. 444

45.5. Рисование прямоугольника……………………………………………………………………………………………. 445

45.6. Применение вращения……………………………………………………………………………………………………. 449

45.7. Рисование кругов и овалов…………………………………………………………………………………………….. 449

45.8. Рисование градиентов…………………………………………………………………………………………………….. 451

45.9. Рисование дуг………………………………………………………………………………………………………………….. 454

45.10. Рисование путей……………………………………………………………………………………………………………. 455

45.11. Рисование точек……………………………………………………………………………………………………………. 456

45.12. Рисование изображения……………………………………………………………………………………………….. 457

45.13. Рисование текста…………………………………………………………………………………………………………… 460

45.14. Заключение……………………………………………………………………………………………………………………. 462

Глава 46. Работа с ViewModels в Compose…………………………………………….. 463

46.1. Что такое Android Jetpack?…………………………………………………………………………………………….. 463

46.2. «Старая» архитектура……………………………………………………………………………………………………. 463

46.3. Современная архитектура Android……………………………………………………………………………….. 464

46.4. Компонент ViewModel……………………………………………………………………………………………………. 464

46.5. Реализация ViewModel с помощью состояния……………………………………………………………… 465

46.6. Подключение состояния ViewModel к активити…………………………………………………………… 466

46.7. Реализация ViewModel с использованием LiveData…………………………………………………….. 468

46.8. Наблюдение за LiveData для ViewModel внутри активити…………………………………………. 468

46.9. Заключение……………………………………………………………………………………………………………………… 469

Глава 47. Руководство по ViewModel в Compose…………………………………… 470

47.1. О проекте…………………………………………………………………………………………………………………………. 470

47.2. Создание проекта ViewModelDemo………………………………………………………………………………. 471

47.3. Добавление ViewModel…………………………………………………………………………………………………… 472

47.4. Доступ к DemoViewModel из MainActivity……………………………………………………………………. 473

47.5. Проектирование компонуемой функции для ввода температуры………………………………. 474

47.6. Проектирование компонуемой функции для ввода температуры………………………………. 476

47.7. Завершение дизайна пользовательского интерфейса…………………………………………………. 479

47.8. Тестирование приложения…………………………………………………………………………………………….. 480

47.9. Заключение……………………………………………………………………………………………………………………… 480

Глава 48. Обзор базы данных SQLite……………………………………………………. 481

48.1. Понимание таблиц базы данных…………………………………………………………………………………… 481

48.2. Знакомство со схемой базы данных……………………………………………………………………………… 481

48.3. Столбцы и типы данных………………………………………………………………………………………………… 482

48.4. Строки базы данных………………………………………………………………………………………………………. 482

48.5. Введение в первичные ключи………………………………………………………………………………………… 482

48.6. Что такое SQLite?……………………………………………………………………………………………………………. 483

48.7. Язык структурированных запросов………………………………………………………………………………. 483

48.8. Тестирование SQLite на виртуальном устройстве Android…………………………………………. 484

48.9. Android-библиотека Room для хранения данных на устройстве………………………………. 486

48.10. Заключение……………………………………………………………………………………………………………………. 486

Глава 49. Базы данных Room в Compose………………………………………………. 487

49.1. Пересмотр современной архитектуры приложений……………………………………………………. 487

49.2. Ключевые элементы базы данных Room……………………………………………………………………… 488

49.2.1. Репозиторий………………………………………………………………………………………………………… 488

49.2.2. База данных Room…………………………………………………………………………………………….. 488

49.2.3. Объект доступа к данным (DAO)………………………………………………………………………. 488

49.2.4. Сущности…………………………………………………………………………………………………………….. 488

49.2.5. База данных SQLite……………………………………………………………………………………………. 489

49.3. Понимание сущностей……………………………………………………………………………………………………. 490

49.4. Объекты доступа к данным……………………………………………………………………………………………. 492

49.5. База данных Room…………………………………………………………………………………………………………. 494

49.6. Репозиторий…………………………………………………………………………………………………………………….. 495

49.7. Базы данных, хранящиеся в памяти……………………………………………………………………………… 496

49.8. Инспектор баз данных……………………………………………………………………………………………………. 496

49.9. Заключение……………………………………………………………………………………………………………………… 497

Глава 50. Руководство по базам данных Room и Репозиторию в Compose 498

50.1. О проекте RoomDemo…………………………………………………………………………………………………….. 498

50.2. Создание проекта RoomDemo………………………………………………………………………………………. 498

50.3. Модификация конфигурации сборки…………………………………………………………………………….. 499

50.4. Создание сущности………………………………………………………………………………………………………… 501

50.5. Создание DAO…………………………………………………………………………………………………………………. 502

50.6. Добавление базы данных Room……………………………………………………………………………………. 503

50.7. Добавление репозитория……………………………………………………………………………………………….. 504

50.8. Добавление ViewModel…………………………………………………………………………………………………… 506

50.9. Проектирование пользовательского интерфейса………………………………………………………… 508

50.10. Написание класса ViewModelProviderFactory……………………………………………………………. 510

50.11. Завершение функции MainScreen………………………………………………………………………………… 512

50.12. Тестирование приложения RoomDemo………………………………………………………………………. 515

50.13. Использование Database Inspector………………………………………………………………………………. 515

50.14. Заключение……………………………………………………………………………………………………………………. 516

Глава 51. Обзор навигации в Compose…………………………………………………. 517

51.1. Понимание навигации…………………………………………………………………………………………………….. 517

51.2. Объявление контроллера навигации…………………………………………………………………………….. 519

51.3. Объявление хоста навигации…………………………………………………………………………………………. 519

51.4. Добавление пунктов назначения в навигационный граф……………………………………………. 520

51.5. Навигация к пунктам назначения………………………………………………………………………………….. 522

51.6. Передача аргументов в пункт назначения……………………………………………………………………. 523

51.7. Работа с нижними навигационными панелями……………………………………………………………. 525

51.8. Заключение……………………………………………………………………………………………………………………… 526

Глава 52. Руководство по навигации в Compose…………………………………… 527

52.1. Создание проекта NavigationDemo……………………………………………………………………………….. 527

52.2. О проекте NavigationDemo…………………………………………………………………………………………….. 528

52.3. Объявление маршрутов навигации……………………………………………………………………………….. 528

52.4. Добавление домашнего экрана……………………………………………………………………………………… 528

52.5. Добавление экрана приветствия……………………………………………………………………………………. 530

52.6. Добавление экрана профиля………………………………………………………………………………………….. 531

52.7. Создание контроллера навигации и хоста…………………………………………………………………… 531

52.8. Реализация навигации по экрану………………………………………………………………………………….. 532

52.9. Передача аргумента имени пользователя……………………………………………………………………. 533

52.10. Тестирование проекта………………………………………………………………………………………………….. 534

52.11. Заключение……………………………………………………………………………………………………………………. 535

Глава 53. Руководство по навигационной панели в Compose……………….. 536

53.1. Создание проекта BottomBarDemo………………………………………………………………………………. 536

53.2. Объявление маршрутов навигации……………………………………………………………………………….. 537

53.3. Проектирование элементов панели………………………………………………………………………………. 537

53.4. Создание списка элементов панели………………………………………………………………………………. 538

53.5. Добавление экранов назначения…………………………………………………………………………………… 539

53.6. Создание контроллера и хоста навигации…………………………………………………………………… 541

53.7. Проектирование панели навигации………………………………………………………………………………. 541

53.8. Работа с компонентом Scaffold……………………………………………………………………………………… 543

53.9. Тестирование проекта……………………………………………………………………………………………………. 544

53.10. Заключение……………………………………………………………………………………………………………………. 545

Глава 54. Распознавание жестов в Compose………………………………………….. 546

54.1. Распознавание жестов в Compose…………………………………………………………………………………. 546

54.2. Создание проекта GestureDemo…………………………………………………………………………………….. 546

54.3. Обнаружение жестов нажатия………………………………………………………………………………………. 547

54.4. Обнаружение нажатий с помощью PointerInputScope………………………………………………… 548

54.5. Обнаружение жестов перетаскивания………………………………………………………………………….. 550

54.6. Обнаружение жестов перетаскивания с помощью PointerInputScope……………………….. 552

54.7. Прокрутка с помощью модификатора scrollable………………………………………………………….. 553

54.8. Модификаторы прокрутки…………………………………………………………………………………………….. 554

54.9. Обнаружение жестов сжатия…………………………………………………………………………………………. 556

54.10. Определение жестов вращения……………………………………………………………………………………. 558

54.11. Обнаружение жестов сдвига………………………………………………………………………………………… 559

54.12. Заключение……………………………………………………………………………………………………………………. 560

Глава 55. Работа с закрепленными перетаскиваемыми компонентами… 561

55.1. Перетаскивание и якоря…………………………………………………………………………………………………. 561

55.2. Обнаружение жестов перетаскивания………………………………………………………………………….. 561

55.3. Объявление точек привязки……………………………………………………………………………………………. 562

55.4. Объявление порогов……………………………………………………………………………………………………….. 562

55.5. Объявление перетаскиваемого состояния…………………………………………………………………….. 562

55.6. Перемещение компонента в ответ на жест перетаскивания……………………………………….. 563

55.7. О проекте DraggableDemo………………………………………………………………………………………………. 564

55.8. Создание проекта DraggableDemo………………………………………………………………………………… 564

55.9. Добавление библиотеки Foundation……………………………………………………………………………… 565

55.10. Добавление перечислений якорей………………………………………………………………………………. 565

55.11. Настройка перетаскиваемого состояния и якорей…………………………………………………….. 566

55.12. Проектирование родительского элемента Box………………………………………………………….. 567

55.13. Добавление перетаскиваемого элемента Box……………………………………………………………. 569

55.14. Тестирование проекта………………………………………………………………………………………………….. 572

55.15. Заключение……………………………………………………………………………………………………………………. 572

Глава 56. Введение в потоки Kotlin………………………………………………………. 573

56.1. Понимание потоков………………………………………………………………………………………………………… 573

56.2. Создание примера проекта……………………………………………………………………………………………. 574

56.3. Добавление модели представления в проект……………………………………………………………….. 575

56.4. Объявление потока…………………………………………………………………………………………………………. 575

56.5. Передача потоковых данных………………………………………………………………………………………… 576

56.6. Сбор потоковых данных в виде состояния…………………………………………………………………… 577

56.7. Преобразование данных с помощью посредников……………………………………………………… 578

56.8. Сбор потоковых данных………………………………………………………………………………………………… 580

56.9. Добавление буфера потока……………………………………………………………………………………………. 582

56.10. Другие терминальные операторы потока………………………………………………………………….. 583

56.11. Выравнивание потока………………………………………………………………………………………………….. 584

56.12. Объединение нескольких потоков……………………………………………………………………………….. 586

56.13. Горячие и холодные потоки………………………………………………………………………………………… 587

56.14. StateFlow………………………………………………………………………………………………………………………… 587

56.15. SharedFlow……………………………………………………………………………………………………………………… 589

56.16. Преобразование холодного потока в горячий…………………………………………………………… 591

56.17. Заключение……………………………………………………………………………………………………………………. 591

Глава 57. Руководство по SharedFlow в Compose………………………………….. 592

57.1. О проекте…………………………………………………………………………………………………………………………. 592

57.2. Создание проекта SharedFlowDemo……………………………………………………………………………… 592

57.3. Добавление модели представления в проект……………………………………………………………….. 593

57.4. Объявление SharedFlow………………………………………………………………………………………………….. 594

57.5. Сбор значений из потока……………………………………………………………………………………………….. 595

57.6. Тестирование приложения SharedFlowDemo……………………………………………………………….. 596

57.7. Обработка потоков в фоновом режиме…………………………………………………………………………. 597

57.8. Заключение……………………………………………………………………………………………………………………… 599

Глава 58. Руководство по биометрической аутентификации в Android… 600

58.1. Обзор биометрической аутентификации………………………………………………………………………. 600

58.2. Создание проекта биометрической аутентификации………………………………………………….. 600

58.3. Добавление биометрической зависимости…………………………………………………………………… 601

58.4. Настройка аутентификации по отпечаткам пальцев………………………………………………….. 601

58.5. Добавление биометрических разрешений в файл манифеста…………………………………….. 602

58.6. Проверка настроек безопасности………………………………………………………………………………….. 603

58.7. Проектирование пользовательского интерфейса………………………………………………………… 604

58.8. Настройка колбэков аутентификации………………………………………………………………………….. 605

58.9. Запуск биометрического запроса………………………………………………………………………………….. 606

58.10. Тестирование проекта………………………………………………………………………………………………….. 607

58.11. Заключение……………………………………………………………………………………………………………………. 607

Глава 59. Работа с Google Maps API в Android Studio……………………………. 608

59.1. Элементы Google Maps…………………………………………………………………………………………………… 608

59.2. Создание проекта Google Maps……………………………………………………………………………………… 609

59.3. Создание учетной записи Google Cloud………………………………………………………………………… 609

59.4. Создание нового проекта Google Cloud………………………………………………………………………… 610

59.5. Включение Google Maps SDK………………………………………………………………………………………… 611

59.6. Генерация ключа Google Maps………………………………………………………………………………………. 612

59.7. Добавление ключа API в проект……………………………………………………………………………………. 612

59.8. Добавление зависимости Compose Map………………………………………………………………………. 614

59.9. Создание карты………………………………………………………………………………………………………………. 614

59.10. Тестирование приложения…………………………………………………………………………………………… 614

59.11. Понимание геокодирования и обратного геокодирования……………………………………….. 615

59.12. Указание местоположения на карте……………………………………………………………………………. 617

59.13. Изменение типа карты………………………………………………………………………………………………….. 618

59.14. Отображение элементов управления картой для пользователя………………………………. 620

59.15. Обработка взаимодействия жестов с картой……………………………………………………………… 621

59.15.1. Жесты масштабирования………………………………………………………………………………. 621

59.15.2. Жесты прокрутки/сдвига карты……………………………………………………………………. 622

59.15.3. Жесты наклона карты……………………………………………………………………………………. 622

59.15.4. Жесты поворота карты………………………………………………………………………………….. 622

59.16. Создание маркеров карты……………………………………………………………………………………………. 622

59.17. Управление камерой карты…………………………………………………………………………………………. 624

59.18. Заключение……………………………………………………………………………………………………………………. 625

Глава 60. Создание, тестирование и загрузка пакета Android-приложений 626

60.1. Процесс подготовки к релизу…………………………………………………………………………………………. 626

60.2. Пакеты Android-приложений…………………………………………………………………………………………. 626

60.3. Регистрация аккаунта в консоли разработчика Google Play………………………………………. 627

60.4. Настройка приложения в консоли………………………………………………………………………………… 628

60.5. Включение подписи приложений в Google Play…………………………………………………………… 628

60.6. Создание файла для хранения ключей…………………………………………………………………………. 631

60.7. Создание пакета Android-приложений…………………………………………………………………………. 632

60.8. Создание тестовых APK-файлов……………………………………………………………………………………. 634

60.9. Загрузка пакета приложения в Консоль разработчика Google Play………………………….. 635

60.10. Обзор пакета приложений……………………………………………………………………………………………. 636

60.11. Управление тестерами…………………………………………………………………………………………………. 638

60.12. Развертывание приложения для тестирования………………………………………………………….. 639

60.13. Загрузка новых версий пакета приложений………………………………………………………………. 639

60.14. Анализ файла пакета приложения………………………………………………………………………………. 640

60.15. Заключение……………………………………………………………………………………………………………………. 641

Глава 61. Обзор биллинга в Android-приложениях……………………………….. 642

61.1. Подготовка проекта для покупок внутри приложения………………………………………………… 642

61.2. Создание продуктов и подписок внутри приложения…………………………………………………. 643

61.3. Инициализация BillingClient…………………………………………………………………………………………… 644

61.4. Подключение к библиотеке Google Play Billing…………………………………………………………….. 645

61.5. Запрос доступных продуктов………………………………………………………………………………………… 645

61.6. Запуск процесса покупки……………………………………………………………………………………………….. 646

61.7. Завершение покупки……………………………………………………………………………………………………….. 647

61.8. Запрос предыдущих покупок………………………………………………………………………………………… 648

61.9. Заключение……………………………………………………………………………………………………………………… 649

Глава 62. Руководство по покупкам в приложении Android…………………. 650

62.1. О проекте тестовых покупок в приложении…………………………………………………………………. 650

62.2. Создание проекта InAppPurchase………………………………………………………………………………….. 650

62.3. Добавление библиотек в проект……………………………………………………………………………………. 651

62.4. Добавление приложения в Google Play Store………………………………………………………………… 652

62.5. Создание продукта внутри приложения………………………………………………………………………. 652

62.6. Включение тестировщиков лицензий……………………………………………………………………………. 653

62.7. Создание вспомогательного класса для покупок………………………………………………………… 654

62.8. Добавление потоков StateFlow………………………………………………………………………………………. 655

62.9. Инициализация BillingClient…………………………………………………………………………………………… 655

62.10. Запрос продукта…………………………………………………………………………………………………………… 656

62.11. Обработка обновлений покупок………………………………………………………………………………….. 657

62.12. Запуск процесса покупки…………………………………………………………………………………………….. 658

62.13. Использование продукта……………………………………………………………………………………………… 659

62.14. Восстановление предыдущей покупки……………………………………………………………………….. 659

62.15. Завершение MainActivity……………………………………………………………………………………………… 660

62.16. Тестирование приложения…………………………………………………………………………………………… 662

62.17. Устранение неполадок…………………………………………………………………………………………………. 665

62.18. Заключение……………………………………………………………………………………………………………………. 665

Глава 63. Работа с темами в Compose…………………………………………………… 666

63.1. Material Design 2 и Material Design 3………………………………………………………………………………. 666

63.2. Тематизация Material Design 3……………………………………………………………………………………….. 666

63.3. Заключение……………………………………………………………………………………………………………………… 671

Глава 64. Руководство по тематическому оформлению Material Design 3 672

64.1. Создание проекта ThemeDemo……………………………………………………………………………………… 672

64.2. Проектирование пользовательского интерфейса………………………………………………………… 672

64.3. Создание новой темы……………………………………………………………………………………………………… 675

64.4. Добавление темы в проект……………………………………………………………………………………………… 676

64.5. Включение динамических цветов………………………………………………………………………………….. 676

64.6. Заключение……………………………………………………………………………………………………………………… 678

Глава 65. Обзор на Gradle в Android Studio…………………………………………… 679

65.1. Обзор Gradle…………………………………………………………………………………………………………………….. 679

65.2. Gradle и Android Studio……………………………………………………………………………………………………. 679

65.2.1. Разумные значения по умолчанию…………………………………………………………………… 680

65.2.2. Зависимости………………………………………………………………………………………………………… 680

65.2.3. Варианты сборки……………………………………………………………………………………………….. 680

65.2.4. Записи манифеста………………………………………………………………………………………………. 680

65.2.5. Подписание APK…………………………………………………………………………………………………. 681

65.2.6. Поддержка ProGuard………………………………………………………………………………………….. 681

65.3. Файл сборки Gradle со свойствами и настройками……………………………………………………… 681

65.4. Файл сборки Gradle верхнего уровня……………………………………………………………………………. 682

65.5. Файлы сборки Gradle на уровне модуля……………………………………………………………………….. 683

65.6. Настройка параметров подписи в файле сборки…………………………………………………………. 686

65.7. Запуск задач Gradle из командной строки……………………………………………………………………. 687

65.8. Заключение……………………………………………………………………………………………………………………… 687

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

Новинка: “Архитектура cложных веб-приложений: c примерами на Laravel”

Архитектура cложных веб-приложений: c примерами на Laravel

Книга посвящена практическим аспектам проектирования архитектуры сложных веб-приложений с примерами на Laravel. Рассматриваются типовые проблемы, возникающие при масштабировании проектов, и подходы к их решению, включая выстраивание слоев приложения, организацию бизнес-логики, разделение ответственности и работу с инфраструктурным кодом. Анализируются распространенные архитектурные ошибки, связанные с чрезмерной зависимостью от фреймворков, и предлагаются альтернативные решения на основе проверенных практик. Описаны обработка ошибок и валидация, реализация доменного слоя, использование архитектурных паттернов CQRS и Event Sourcing. Особое внимание уделено unit-тестированию, управлению зависимостями, событийно-ориентированному подходу и внедрению паттернов, устойчивых к росту сложности.

Для разработчиков, архитекторов ПО и технических руководителей

Идеальная архитектура для сложных проектов

Современные веб-приложения быстро выходят за рамки простых CRUD-интерфейсов. Стандарты MVC, удобные инструменты быстрой разработки и популярные фреймворки, такие как Laravel, на первых этапах помогают, но со временем становятся источником проблем, поскольку рост проекта требует продуманной архитектуры.

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

  • Почему принцип «один контроллер правит всеми» — путь к хаосу
  • Как выстраивать слои приложения: от запроса к бизнес-логике
  • Зачем нужны сервисные классы, value objects и событийно-ориентированный подход
  • Как правильно тестировать приложение и не утонуть в абстракциях
  • Где проходит граница между удобством и чрезмерной магией фреймворков

Автор рассматривает типовые ошибки роста — перегрузку контроллеров, слепую веру в REST, злоупотребление Active Record и удобством фреймворков. Через призму реального опыта описываются внедрение зависимостей, работа с исключениями, разделение валидации, построение слоя приложений, подходы к unit-тестированию, реализация доменного слоя и архитектурные паттерны вроде CQRS (Command Query Responsibility Segregation) и Event Sourcing.

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

  • Проблемы роста проекта и их решение
  • Внедрение зависимостей
  • Безболезненный рефакторинг
  • Выстраивание слоев приложения
  • Обработка ошибок и валидация
  • Событийно-ориентированный подход
  • Проведение unit-тестирования
  • Реализация доменного слоя
  • Использование архитектурных паттернов CQRS и Event Sourcing

Книгу “Архитектура cложных веб-приложений: c примерами на Laravel” можно купить в нашем интенет-магазине.

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

Глава 1. Плохие привычки………………………………………………………………………. 8

Проблемы роста…………………………………………………………………………………………………………………………… 8

Выделение логики……………………………………………………………………………………………………………………… 10

Соблазнительная «простота» REST…………………………………………………………………………………………. 13

Поклонение темной магии PHP…………………………………………………………………………………………………. 15

«Быстрая» разработка приложений (RAD)……………………………………………………………………………… 17

Преждевременная оптимизация……………………………………………………………………………………………….. 19

Экономия строк кода…………………………………………………………………………………………………………………. 20

Прочие источники боли…………………………………………………………………………………………………………….. 21

Глава 2. Внедрение зависимостей…………………………………………………………… 22

Принцип единственной ответственности…………………………………………………………………………………. 22

Dependency Injection………………………………………………………………………………………………………………….. 25

Наследование…………………………………………………………………………………………………………………………….. 32

Пример с загрузкой картинок……………………………………………………………………………………………………. 35

Начальный рефакторинг…………………………………………………………………………………………………… 37

ООП-путь……………………………………………………………………………………………………………………. 41

Путь конфигурации (Configuration way)…………………………………………………………………. 44

Расширение интерфейсов………………………………………………………………………………………………………….. 45

Трейты………………………………………………………………………………………………………………………………………… 49

Трейты, расширяющие интерфейсы…………………………………………………………………………………. 50

Трейты как части класса…………………………………………………………………………………………………… 51

Трейты как поведение………………………………………………………………………………………………………… 52

Бесполезные трейты…………………………………………………………………………………………………………… 54

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

Пара слов в конце главы……………………………………………………………………………………………………………. 57

Глава 3. Безболезненный рефакторинг…………………………………………………… 58

«Статическая» типизация………………………………………………………………………………………………………….. 58

Шаблоны…………………………………………………………………………………………………………………………………….. 60

Поля моделей……………………………………………………………………………………………………………………………… 61

Плагин Laravel Idea…………………………………………………………………………………………………………………… 63

Глава 4. Слой приложения…………………………………………………………………….. 65

Передача данных запроса………………………………………………………………………………………………………… 67

Работа с базой данных……………………………………………………………………………………………………………… 71

Сервисные классы или классы команд?………………………………………………………………………………….. 75

Пара слов в конце главы……………………………………………………………………………………………………………. 76

Глава 5. Обработка ошибок…………………………………………………………………… 77

Исключения (Exceptions)…………………………………………………………………………………………………………… 80

Базовый класс исключения……………………………………………………………………………………………………….. 83

Глобальный обработчик…………………………………………………………………………………………………………… 84

Проверяемые и непроверяемые исключения…………………………………………………………………………… 86

Пара слов в конце главы……………………………………………………………………………………………………………. 90

Глава 6. Валидация………………………………………………………………………………… 92

Валидация, связанная с базой данных…………………………………………………………………………………….. 92

Два уровня валидации………………………………………………………………………………………………………………. 95

Валидация аннотациями…………………………………………………………………………………………………………… 96

Проблема данных HTTP-запроса…………………………………………………………………………………….. 97

Проблема сложных структур данных……………………………………………………………………………… 98

Объект-значение (Value objects)……………………………………………………………………………………………….. 98

Объект-значение как композиция других значений……………………………………………………………… 100

Объекты-значения и валидация……………………………………………………………………………………………… 101

Пара слов в конце главы…………………………………………………………………………………………………………. 103

Глава 7. События…………………………………………………………………………………. 104

Транзакции базы данных (Database transactions)…………………………………………………………………. 105

Очереди…………………………………………………………………………………………………………………………………….. 107

Механизм событий………………………………………………………………………………………………………………….. 108

Использование событий Eloquent…………………………………………………………………………………………… 109

Сущности как поля классов-событий…………………………………………………………………………………….. 111

Пара слов в конце главы…………………………………………………………………………………………………………. 113

Глава 8. Unit-тестирование…………………………………………………………………… 114

Первые шаги…………………………………………………………………………………………………………………………….. 114

Тестирование классов с состоянием………………………………………………………………………………………. 118

Тестирование классов с зависимостями………………………………………………………………………………… 120

Зависимости на реальные классы………………………………………………………………………………….. 120

Стабы и фейки………………………………………………………………………………………………………………….. 122

Моки………………………………………………………………………………………………………………………………….. 123

Типы тестов ПО………………………………………………………………………………………………………………………… 124

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

Инструменты Laravel для функционального тестирования…………………………………………. 125

Моки Laravel-фасадов……………………………………………………………………………………………………… 129

Unit-тестирование слоя приложения……………………………………………………………………………………… 131

Отсоединяем код от Laravel-фасадов…………………………………………………………………………….. 131

Отсоединяем от базы данных…………………………………………………………………………………………. 133

Стратегия тестирования приложения……………………………………………………………………………………. 136

Глава 9. Доменный слой………………………………………………………………………. 138

Когда и зачем?…………………………………………………………………………………………………………………………. 138

Unit-тестирование…………………………………………………………………………………………………………….. 139

Простота поддержки кода………………………………………………………………………………………………. 141

Шаблоны Active record и Data mapper…………………………………………………………………………… 141

Высокая связность бизнес-логики…………………………………………………………………………………… 141

Сдвиг фокуса с базы данных к предметной области……………………………………………………. 142

Инварианты сущностей…………………………………………………………………………………………………… 143

Реализация доменного слоя……………………………………………………………………………………………………. 143

Пример домена…………………………………………………………………………………………………………………. 143

Доменные события…………………………………………………………………………………………………………… 149

Генерация идентификатора…………………………………………………………………………………………….. 151

Маппинг модели в базу данных……………………………………………………………………………………… 154

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

Обработка ошибок в доменном слое……………………………………………………………………………………… 161

Пара слов в конце главы…………………………………………………………………………………………………………. 163

Глава 10. Шаблон CQRS………………………………………………………………………. 164

Чтение и запись — это разные ответственности?…………………………………………………………………. 164

Хранимые процедуры и представления…………………………………………………………………………. 164

Репликация master-slave………………………………………………………………………………………………….. 166

Типичный сервисный класс…………………………………………………………………………………………….. 167

Отчеты………………………………………………………………………………………………………………………………. 169

Разделение ответственности за командный запрос……………………………………………………………… 169

Пара слов в конце главы…………………………………………………………………………………………………………. 172

Глава 11. Шаблон Event Sourcing…………………………………………………………. 173

Игра королей……………………………………………………………………………………………………………………………. 173

Unit-тестирование сущностей…………………………………………………………………………………………………. 177

Мир без магии………………………………………………………………………………………………………………………….. 178

Реализация ES………………………………………………………………………………………………………………………….. 179

Уникальные данные в ES-системах……………………………………………………………………………………….. 188

Пара слов в конце главы…………………………………………………………………………………………………………. 189

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

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

 

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

2-е издание книги: “Сети с нулевым доверием: Построение безопасных систем в ненадежных сетях”

Сети с нулевым доверием: построение безопасных систем в ненадежных сетях (2 издание)

Раскрыта парадигма информационной безопасности сетей с нулевым доверием (Zero Trust), полностью пересматривающая традиционные подходы к защите данных. Изложены фундаментальные принципы, включая непрерывную верификацию, минимальные привилегии и микросегментацию. Приведены практические сценарии внедрения Zero Trust, включая построение безопасных систем в ненадежных сетях. Обсуждены механизмы контроля доступа, системы оценки доверия и современные методы аутентификации. Приведены конкретные примеры интеграции решений для защиты устройств, пользователей и сетевого трафика. Освещены вопросы миграции с устаревших периметровых систем на архитектуру Zero Trust и рассмотрены реальные кейсы внедрения в организациях различного масштаба. Описаны фреймворки Zero Trust, архитектуры, стандарты и методологии Zero Trust, разработанные NIST, CISA, Министерством обороны США и другими организациями. Дан анализ влияния новых технологий, таких как искусственный интеллект и квантовые вычисления, на эволюцию модели безопасности.

Для специалистов по информационной безопасности.

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

  • Основы Zero Trust, механизмы доверия, политики безопасности, контекстно-зависимые агенты
  • Внедрение безопасности на уровне архитектуры системы
  • Миграция с периметровой защиты на Zero Trust в реальных инфраструктурах
  • Кейсы внедрения Zero Trust в различных организациях
  • Архитектуры, стандарты и методологии Zero Trust, разработанные NIST, CISA, Министерством обороны США и другими организациями.

“Доверяй. Но проверяй. Всегда.”

Книга подробно объясняет модель безопасности сетей с нулевым доверием (Zero Trust ) — современный подход, который отвергает традиционную периметровую защиту, заменяя ее принципами: «всегда предполагай взлом» и «никогда не доверяй, но проверяй».

Приведены практические сценарии внедрения Zero Trust, включая построение безопасных систем в ненадежных сетях.

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

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

Энн Джонсон, вице-президент по корпоративной безопасности Microsoft

Лучшее руководство по Zero Trust для новичков и профессионалов.

Каран Двиведи, менеджер по инженерной безопасности Google

 

Книгу “Сети с нулевым доверием: Построение безопасных систем в ненадежных сетях (2 издание)” можно купить в нашем интенет-магазине.