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

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

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

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

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

Новинка: “Современный 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

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

Встречайте: “Основы 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

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

“Паттерны коммуникации: руководство для ИТ-разработчиков и архитекторов”

Паттерны коммуникации: руководство для ИТ-разработчиков и архитекторов

Книга  представляет собой практическое руководство по эффективной коммуникации для  ИТ-специалистов, которым необходимо доносить свои идеи до целевой аудитории ясно и понятно.  Она охватывает ключевые аспекты визуальной, письменной, устной и невербальной коммуникаций, а также особенности удаленной работы. Рассмотрены основы создания наглядных диаграмм и документации,  включая работу с цветом и композицией, методы последовательной подачи информации  и повышения  ее  доступности, чтобы адаптировать визуальные материалы для разных аудиторий. Описана работа с языком, структурирование текста, применение языка тела и использование культурных различий с целью убеждения аудитории. Предложены подходы к организации и передаче знаний в командах, включая принципы DRY (Don’t Repeat Yourself). Рассмотрены  современные инструменты для управления знаниями, помогающие сделать информацию доступной и понятной для всех участников проекта. Рассмотрены средства для эффективной работы в распределённых командах, включая синхронные и асинхронные методы коммуникации и  управления временем.

Для разработчиков,  архитекторов и широкого круга ИТ-специалистов

Животное на обложке — коричный зелёный голубь (Treron fulvicollis). Эту редкую птицу можно встретить в субтропических и тропических мангровых лесах, болотах и влажных кустарниках в Индонезии, Малайзии, Мьянме, Сингапуре и Таиланде. Вы также можете увидеть их в сельских садах.

Отличной идеи или удачного дизайна недостаточно для успеха.

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

В этой практической книге эксперт в области архитектуры приложений объясняет как:

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

Что внутри?

  • Реальные кейсы и готовые шаблоны
  • Гибкие методики адаптации сообщений для разных аудиторий
  • Инструменты для ясной и понятной передачи сложных технических концепций

Это экспертное руководство, которое раскрывает сложность языка челове-ческого взаимодействия. Обязательно к прочтению!

Марк Ричардс, программный архитектор, основатель сайта DeveloperToArchitect.com

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

Ребекка Парсонс, главный технический директор ИТ-компании Thoughtworks

Эта книга научит вас:

  • Готовить диаграммы и документацию с учетом аудитории, целей сообщения и стадии проекта
  • Создавать материалы, понятные для специалистов разного уровня и людей с ограниченными возможностями
  • Освоить разные форматы общения: визуальный, письменный, устный и невербальный
  • Эффективно работать с распределенными командами при проектировании и документировании ИТ-решений
  • Использовать готовые паттерны  коммуникации в реальных разработках

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

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

Введение………………………………………………………………………………………………… 14

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

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

Как читать эту книгу…………………………………………………………………………………………………………………. 17

Изображения и цвета…………………………………………………………………………………………………………………. 17

Программные средства……………………………………………………………………………………………………………… 17

Полиглот Медиа………………………………………………………………………………………………………………………… 18

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

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

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

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

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

Часть I. Визуальная коммуникация………………………………………. 23

Глава 1. Основы коммуникации……………………………………………………………. 25

Знайте вашу аудиторию……………………………………………………………………………………………………………. 25

Смешение уровней абстракции………………………………………………………………………………………………… 29

Согласованность репрезентации……………………………………………………………………………………………… 33

Итоги…………………………………………………………………………………………………………………………………………… 37

Глава 2. Устранение беспорядка……………………………………………………………. 38

Цветовая перегрузка………………………………………………………………………………………………………………….. 38

Прямоугольники в прямоугольниках в прямоугольниках……………………………………………………… 40

Паутина взаимосвязей……………………………………………………………………………………………………………….. 42

Баланс текстовой информации…………………………………………………………………………………………………. 46

Итоги…………………………………………………………………………………………………………………………………………… 48

Глава 3. Доступность……………………………………………………………………………… 49

Зависимость от цвета при коммуникации……………………………………………………………………………….. 49

Использование легенды…………………………………………………………………………………………………………….. 54

Подходящие подписи………………………………………………………………………………………………………………… 57

Итоги…………………………………………………………………………………………………………………………………………… 59

Глава 4. Повествование…………………………………………………………………………. 60

Все начинается с общей картины…………………………………………………………………………………………….. 60

Соответствие диаграммы потоков ожиданиям……………………………………………………………………….. 63

Ясные взаимосвязи…………………………………………………………………………………………………………………….. 66

Итоги…………………………………………………………………………………………………………………………………………… 69

Глава 5. Нотация……………………………………………………………………………………. 70

Использование эмблем для передачи смысла…………………………………………………………………………. 70

UML ради UML………………………………………………………………………………………………………………………….. 72

Смешение поведенческого и структурного типов…………………………………………………………………… 76

Несоответствие ожиданиям………………………………………………………………………………………………………. 77

Итоги…………………………………………………………………………………………………………………………………………… 80

Глава 6. Композиция……………………………………………………………………………… 81

Неразборчивые диаграммы………………………………………………………………………………………………………. 81

Коммуникация через стили……………………………………………………………………………………………………….. 86

Запутывающая композиция………………………………………………………………………………………………………. 88

Создание визуального баланса………………………………………………………………………………………………… 93

Итоги…………………………………………………………………………………………………………………………………………… 96

Часть II. Мультимодальность…………………………………………………… 97

Глава 7. Письменная коммуникация……………………………………………………… 99

Простой язык………………………………………………………………………………………………………………………………. 99

Проблема акронимов………………………………………………………………………………………………………………. 101

Структура текстового документа…………………………………………………………………………………………… 103

Синтаксис технического документа………………………………………………………………………………………. 106

Сильные глаголы………………………………………………………………………………………………………….. 106

Короткие предложения………………………………………………………………………………………………… 107

Значение абзацев………………………………………………………………………………………………………….. 107

Единство терминологии……………………………………………………………………………………………….. 108

Внимание к аудитории…………………………………………………………………………………………………. 109

Итоги…………………………………………………………………………………………………………………………………………. 110

Глава 8. Вербальная и невербальная коммуникация……………………………. 111

Шифрование сообщений при коммуникации………………………………………………………………………… 111

Пророчество принятия…………………………………………………………………………………………………. 111

Посвящайте все свое внимание участникам коммуникации…………………………………….. 112

Используйте язык тела и жесты…………………………………………………………………………………… 113

Расшифровка сообщений………………………………………………………………………………………………………… 115

Боритесь с предвзятостью……………………………………………………………………………………………. 115

Предвзятость подтверждения……………………………………………………………………………… 116

Знание задним числом…………………………………………………………………………………………. 117

Групповое мышление…………………………………………………………………………………………… 117

Сосредоточьтесь на настоящем………………………………………………………………………………….. 118

Будьте в курсе культурных различий…………………………………………………………………………. 118

Влияние и убеждение………………………………………………………………………………………………………………. 119

Итоги…………………………………………………………………………………………………………………………………………. 123

Глава 9. Классификация риторики Аристотеля……………………………………. 124

Этос…………………………………………………………………………………………………………………………………………… 124

Расскажите о своих достижениях……………………………………………………………………………….. 125

Пользуйтесь надежными источниками………………………………………………………………………. 126

Будьте открыты…………………………………………………………………………………………………………….. 127

Продемонстрируйте ваши знания……………………………………………………………………………….. 129

Пафос………………………………………………………………………………………………………………………………………… 130

Расскажите историю…………………………………………………………………………………………………….. 130

Говорите от чистого сердца………………………………………………………………………………………… 133

Используйте живой язык и яркие образы……………………………………………………………………. 134

Логос…………………………………………………………………………………………………………………………………………. 135

Используйте данные и факты………………………………………………………………………………………. 135

Формируйте логические связи…………………………………………………………………………………….. 136

Рассуждайте и аргументируйте………………………………………………………………………………….. 137

Итоги…………………………………………………………………………………………………………………………………………. 139

Часть III. Передача знаний………………………………………………………… 141

Глава 10. Принципы управления знаниями…………………………………………. 143

Продукты вместо проектов……………………………………………………………………………………………………… 143

Проектное мышление…………………………………………………………………………………………………… 143

Продуктовое мышление……………………………………………………………………………………………….. 144

Абстракции вместо текста………………………………………………………………………………………………………. 147

Списки……………………………………………………………………………………………………………………………. 147

Таблицы………………………………………………………………………………………………………………………… 148

Визуальные абстракции………………………………………………………………………………………………. 149

Облака слов…………………………………………………………………………………………………………………… 150

Схемы, графики и диаграммы……………………………………………………………………………………… 151

Другие виды абстракций……………………………………………………………………………………………… 152

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

Принцип DRY для перспектив……………………………………………………………………………………… 153

Фрактальные перспективы………………………………………………………………………………………….. 154

Реализация перспективы……………………………………………………………………………………………… 155

Итоги…………………………………………………………………………………………………………………………………………. 157

Глава 11. Знания и люди………………………………………………………………………. 158

Постоянная обратная связь на ранних этапах……………………………………………………………………… 158

Разделение нагрузки………………………………………………………………………………………………………………… 162

Свободно распространяемые продукты…………………………………………………………………….. 162

Доступность………………………………………………………………………………………………………………….. 163

Совместная работа………………………………………………………………………………………………………. 165

Распределение обязанностей и ответственности………………………………………………………. 166

Другие приемы……………………………………………………………………………………………………………… 166

Архитектура “точно в срок”……………………………………………………………………………………………………. 167

Итоги…………………………………………………………………………………………………………………………………………. 170

Глава 12. Эффективные практики……………………………………………………….. 171

Документ ADR………………………………………………………………………………………………………………………….. 171

Структура ADR…………………………………………………………………………………………………………….. 172

Заголовок и имя файла………………………………………………………………………………………… 173

Статус……………………………………………………………………………………………………………………. 173

Контекст………………………………………………………………………………………………………………… 174

Критерий оценивания………………………………………………………………………………………….. 175

Варианты………………………………………………………………………………………………………………. 175

Решение…………………………………………………………………………………………………………………. 175

Результаты……………………………………………………………………………………………………………. 175

Обсуждение…………………………………………………………………………………………………………… 176

Содержимое ADR…………………………………………………………………………………………………………. 176

Как хранить ADR………………………………………………………………………………………………………….. 180

Культура ADR………………………………………………………………………………………………………………. 181

Характеристики архитектуры………………………………………………………………………………………………… 184

Документация в виде программного кода……………………………………………………………………………… 187

Техническая документация…………………………………………………………………………………………. 188

Автоматическое создание документации…………………………………………………………………… 190

Другая документация…………………………………………………………………………………………………… 191

Итоги…………………………………………………………………………………………………………………………………………. 194

Часть IV. Дистанционная коммуникация…………………………. 195

Глава 13. Фактор времени при дистанционном общении…………………….. 197

Синхронизация времени………………………………………………………………………………………………………….. 197

Часовые пояса………………………………………………………………………………………………………………. 198

Эмпатия и компромиссы………………………………………………………………………………………………. 201

Сменный график работы……………………………………………………………………………………………… 202

Соблюдение рабочих паттернов……………………………………………………………………………………………. 204

Уведомление о доступности………………………………………………………………………………………… 204

Несовпадение часов работы при частичной занятости……………………………………………. 205

Планирование нерабочих дней…………………………………………………………………………………… 205

Учет местоположения и культурных особенностей………………………………………………….. 207

Оценка реального трудового потенциала………………………………………………………………….. 208

Повышение работоспособности и продуктивности……………………………………………………………… 209

Контроль уведомлений………………………………………………………………………………………………… 209

Автоматизация задач…………………………………………………………………………………………………… 210

Соблюдение ритмов других сотрудников………………………………………………………………….. 211

Составление расписания на основе биоритмов………………………………………………………… 211

Итоги…………………………………………………………………………………………………………………………………………. 213

Глава 14. Принципы дистанционного общения…………………………………… 214

Проведение собраний……………………………………………………………………………………………………………… 214

Синхронная или асинхронная коммуникация?…………………………………………………………. 214

Повышение эффективности собраний………………………………………………………………………… 216

Асинхронная коммуникация…………………………………………………………………………………………………… 221

Преимущества асинхронного общения………………………………………………………………………. 221

Недостатки асинхронного общения…………………………………………………………………………… 221

Направленность коммуникации тоже важна…………………………………………………………….. 222

Способы асинхронного общения………………………………………………………………………………… 224

Способы улучшения асинхронного общения……………………………………………………………. 226

Ориентация на удаленную работу………………………………………………………………………………………… 228

Ориентированный на удаленную работу или располагающий
к удаленной работе?…………………………………………………………………………………………………….. 228

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

Развитие модели с ориентацией на удаленную работу……………………………………………. 232

Итоги…………………………………………………………………………………………………………………………………………. 234

Глава 15. Методы дистанционного общения………………………………………… 235

Симметричная электронная почта…………………………………………………………………………………………. 235

Причины использования электронной почты……………………………………………………………. 236

Правила использования электронной почты…………………………………………………………….. 236

Понятность электронного письма……………………………………………………………………………….. 237

Советы при работе с электронной почтой…………………………………………………………………. 238

Онлайн-презентации……………………………………………………………………………………………………………….. 239

Вовлеченность аудитории…………………………………………………………………………………………… 239

Содержание презентации…………………………………………………………………………………………….. 241

Демонстрация экрана…………………………………………………………………………………………………… 242

Инструменты для удаленной работы и управления…………………………………………………………….. 243

Выбор приемов……………………………………………………………………………………………………………… 243

Сервисы для удаленной работы…………………………………………………………………………………. 245

Проблема увеличения объема данных……………………………………………………………………….. 247

Безопасность…………………………………………………………………………………………………………………. 249

Эффективность инструментов……………………………………………………………………………………… 249

Управление ПО……………………………………………………………………………………………………………… 250

Итоги…………………………………………………………………………………………………………………………………………. 256

Эпилог………………………………………………………………………………………………….. 257

Приложение. Шаблоны ADR………………………………………………………………… 258

Структура ADR………………………………………………………………………………………………………………………… 258

Идентификатор и заголовок: заявление о принятом решении………………………………….. 258

Варианты ADR…………………………………………………………………………………………………………………………. 259

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

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

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

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

Встречайте: “Изучаем Data Science: обработка, исследование, визуализация и моделирование данных с помощью Python”

Изучаем Data Science: обработка, исследование, визуализация и моделирование данных с помощью Python

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

Для начинающих специалистов в области Data Science , аналитиков данных и широкого круга ИТ-специалистов

Именно такой книги нам не хватало, когда мы впервые ввели термин «data scientist» для описания своей профессии. Если вы планируете заниматься наукой о данных, инженерией данных, искусственным интеллектом или машинным обучением, то вам непременно следует начать с нее.
 Ди Джей Патил, PhD, первый в США ведущий data scientist

Как начинающий специалист в области науки о данных (Data Science), вы понимаете, почему в процессе принятия ключевых решений организации полагаются на данные – будь то компании, занимающиеся разработкой веб-сайтов, местные администрации, работающие над повышением качества муниципальных услуг, или научно-исследовательские институты, борющиеся с распространением заболеваний.

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

Перед вами первая книга, в которой рассматриваются базовые навыки программирования и статистики, охватывающие весь жизненный цикл. Она адресована всем желающим работать в области Data Science или любой другой смежной области, а также аналитикам данных, преодолевающим разрыв между техническими и нетехническими областями. Если вы обладаете базовыми знаниями программирования на Python, вы научитесь работать с данными при помощи стандартных инструментов вроде pandas.

Прочитав книгу, вы сможете:

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

Книгу “Изучаем Data Science: обработка, исследование, визуализация и моделирование данных с помощью Python” можно купить в нашем интенет-магазине.

Отзывы на книгу…………………………………………………………………………………… 13

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

Требуемые базовые знания……………………………………………………………………………………………………….. 15

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

Принятые условные обозначения…………………………………………………………………………………………….. 16

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

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

Наши контакты………………………………………………………………………………………………………………………….. 17

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

Часть I. Жизненный цикл Data Science………………………………….. 19

Глава 1. Жизненный цикл Data Science………………………………………………….. 21

Этапы жизненного цикла………………………………………………………………………………………………………….. 21

Примеры жизненного цикла……………………………………………………………………………………………………… 24

Краткие выводы…………………………………………………………………………………………………………………………. 25

Глава 2. Постановка вопроса и охват данных……………………………………….. 26

Большие данные и новые возможности…………………………………………………………………………………… 26

Пример: Google Flu Trends……………………………………………………………………………………………… 27

Целевая совокупность, фрейм доступных данных, выборка…………………………………………………. 29

Пример: что побуждает к активности участников онлайн-сообщества?………………….. 31

Пример: кто победит на выборах?………………………………………………………………………………… 31

Пример: связь экологических угроз со здоровьем человека……………………………………….. 32

Инструменты и протоколы……………………………………………………………………………………………………….. 34

Измерение параметров природных явлений……………………………………………………………………………. 34

Пример: определение содержания CO2 в воздухе……………………………………………………….. 35

Точность……………………………………………………………………………………………………………………………………… 36

Виды смещения……………………………………………………………………………………………………………….. 38

Виды дисперсии……………………………………………………………………………………………………………… 40

Краткие выводы…………………………………………………………………………………………………………………………. 41

Глава 3. Структура данных и моделирование………………………………………… 43

Урновая модель………………………………………………………………………………………………………………………….. 44

Схемы выборки……………………………………………………………………………………………………………….. 46

Выборочное распределение статистики………………………………………………………………………. 48

Моделирование выборочного распределения…………………………………………………………….. 49

Моделирование при помощи гипергеометрического распределения……………………….. 50

Пример: моделирование смещения и дисперсии опросов избирателей……………………………….. 52

Урновая модель опросов в Пенсильвании……………………………………………………………………. 53

Урновая модель со смещением……………………………………………………………………………………… 55

Проведение более масштабных опросов……………………………………………………………………… 56

Пример: моделирование рандомизированного испытания вакцины……………………………………. 58

Охват……………………………………………………………………………………………………………………………….. 58

Урновая модель случайного распределения……………………………………………………………….. 60

Пример: измерение качества воздуха………………………………………………………………………………………. 61

Краткие выводы…………………………………………………………………………………………………………………………. 64

Глава 4. Моделирование при помощи сводной статистики……………………. 66

Константная модель………………………………………………………………………………………………………………….. 66

Минимизация потерь…………………………………………………………………………………………………………………. 68

Средняя абсолютная ошибка………………………………………………………………………………………… 69

Среднеквадратичная ошибка………………………………………………………………………………………… 72

Выбор функции потерь…………………………………………………………………………………………………… 74

Краткие выводы…………………………………………………………………………………………………………………………. 74

Глава 5. Пример из практики: почему мой автобус всегда опаздывает?… 76

Постановка вопроса и охват данных………………………………………………………………………………………. 76

Первичная обработка данных………………………………………………………………………………………………….. 77

Изучение расписания автобусов………………………………………………………………………………………………. 80

Моделирование времени ожидания…………………………………………………………………………………………. 83

Краткие выводы…………………………………………………………………………………………………………………………. 87

Часть II. Табличные данные………………………………………………………. 89

Глава 6. Работа с датафреймами с помощью pandas………………………………. 91

Подмножество……………………………………………………………………………………………………………………………. 92

Охват данных и постановка вопроса……………………………………………………………………………. 92

Датафрейм и индекс……………………………………………………………………………………………………….. 93

Срез………………………………………………………………………………………………………………………………….. 94

Фильтрация строк…………………………………………………………………………………………………………… 98

Пример: когда стало популярным имя Luna?……………………………………………………………. 100

Агрегирование………………………………………………………………………………………………………………………….. 102

Агрегирование и базовая группировка………………………………………………………………………. 103

Пример: использование функции .value_counts()………………………………………………. 104

Группировка по нескольким столбцам………………………………………………………………………. 105

Пользовательские агрегатные функции……………………………………………………………………… 106

Поворот…………………………………………………………………………………………………………………………. 109

Соединение………………………………………………………………………………………………………………………………. 110

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

Левые, правые и внешние соединения………………………………………………………………………… 113

Пример: популярность категорий имен из статьи New York Times…………………………… 114

Преобразование……………………………………………………………………………………………………………………….. 116

Метод apply…………………………………………………………………………………………………………………… 117

Пример: популярность имен на букву “L”………………………………………………………………….. 118

Цена метода apply………………………………………………………………………………………………………… 120

Отличие датафрейма от других представлений данных……………………………………………………… 121

Датафрейм и электронная таблица…………………………………………………………………………….. 121

Датафрейм и матрица………………………………………………………………………………………………….. 121

Датафрейм и отношение………………………………………………………………………………………………. 122

Краткие выводы……………………………………………………………………………………………………………………….. 123

Глава 7. Работа с отношениями с помощью SQL………………………………….. 124

Подмножество………………………………………………………………………………………………………………………….. 124

Основы SQL: SELECT и FROM…………………………………………………………………………………….. 125

Что такое отношение?………………………………………………………………………………………………….. 126

Срез………………………………………………………………………………………………………………………………… 126

Фильтрация строк…………………………………………………………………………………………………………. 128

Пример: когда стало популярным имя Luna?……………………………………………………………. 129

Агрегирование………………………………………………………………………………………………………………………….. 131

Базовая группировка и агрегирование с помощью GROUP BY………………………………… 131

Группировка по нескольким столбцам………………………………………………………………………. 132

Другие агрегатные функции………………………………………………………………………………………… 133

Соединение………………………………………………………………………………………………………………………………. 134

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

Левые и правые соединения………………………………………………………………………………………… 136

Пример: популярность категорий имен из статьи NYT……………………………………………… 137

Преобразование и обобщенные табличные выражения………………………………………………………. 138

Функции SQL…………………………………………………………………………………………………………………. 139

Многошаговые запросы с использованием оператора WITH…………………………………… 141

Пример: популярность имен на букву “L”………………………………………………………………….. 142

Краткие выводы……………………………………………………………………………………………………………………….. 142

Часть III. Осмысление данных……………………………………………….. 145

Глава 8. Первичная обработка файлов…………………………………………………. 147

Примеры источников данных…………………………………………………………………………………………………. 148

Исследование DAWN……………………………………………………………………………………………………. 148

Безопасность пищевых продуктов в ресторанах Сан-Франциско…………………………… 149

Форматы файлов……………………………………………………………………………………………………………………… 150

Формат с разделителями……………………………………………………………………………………………… 150

Формат с фиксированной шириной…………………………………………………………………………….. 152

Иерархические форматы……………………………………………………………………………………………… 153

Свободно форматированный текст…………………………………………………………………………….. 153

Кодировка файла…………………………………………………………………………………………………………………….. 154

Размер файла……………………………………………………………………………………………………………………………. 156

Командная оболочка и инструменты командной строки…………………………………………………….. 159

Форма и гранулярность таблицы…………………………………………………………………………………………… 163

Гранулярность данных о проверках и нарушениях в ресторанах………………………….. 164

Форма и гранулярность исследования DAWN…………………………………………………………… 166

Краткие выводы……………………………………………………………………………………………………………………….. 168

Глава 9. Первичная обработка датафрейма………………………………………….. 170

Пример: первичная обработка результатов измерений содержания CO2
в обсерватории Мауна-Лоа……………………………………………………………………………………………………. 171

Проверка качества……………………………………………………………………………………………………….. 174

Обработка недостающих данных………………………………………………………………………………. 176

Изменение формы таблицы данных……………………………………………………………………………. 177

Проверка качества данных…………………………………………………………………………………………………….. 178

Качество в плане охвата……………………………………………………………………………………………… 179

Качество измерений и регистрируемых значений…………………………………………………….. 179

Качество в плане связанных признаков……………………………………………………………………… 180

Проверка качества на пригодность к исследованию………………………………………………… 181

Выяснение необходимости в исправлении данных…………………………………………………… 182

Пропущенные значения и записи…………………………………………………………………………………………… 183

Преобразования и временне метки………………………………………………………………………………………. 185

Преобразование временнх меток……………………………………………………………………………… 186

Конвейеризация в преобразованиях…………………………………………………………………………… 188

Изменение структуры………………………………………………………………………………………………………………. 190

Пример: первичная обработка данных о нарушениях правил безопасности в ресторанах 192

Сужение фокуса……………………………………………………………………………………………………………. 193

Агрегирование данных о нарушениях……………………………………………………………………….. 194

Извлечение информации из описания нарушений…………………………………………………….. 196

Краткие выводы……………………………………………………………………………………………………………………….. 199

Глава 10. Разведочный анализ данных………………………………………………… 201

Типы признаков данных………………………………………………………………………………………………………….. 202

Пример: породы собак…………………………………………………………………………………………………. 204

Преобразование качественных признаков…………………………………………………………………. 210

Переразметка категорий……………………………………………………………………………………… 210

Сворачивание категорий…………………………………………………………………………………….. 211

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

Роль типов признаков…………………………………………………………………………………………………… 213

На что обратить внимание в распределении………………………………………………………………………… 214

Что необходимо выяснить во взаимосвязи…………………………………………………………………………….. 218

Два количественных признака……………………………………………………………………………………. 218

Один качественный и один количественный признак……………………………………………….. 219

Два качественных признака………………………………………………………………………………………… 221

Сравнения в многомерных системах……………………………………………………………………………………… 223

Руководящие принципы разведочного анализа……………………………………………………………………. 226

Пример: цены на жилую недвижимость………………………………………………………………………………… 227

Изучение цен…………………………………………………………………………………………………………………. 228

Дальнейшие шаги…………………………………………………………………………………………………………. 230

Изучение прочих признаков………………………………………………………………………………………… 231

Углубленный анализ взаимосвязей…………………………………………………………………………….. 234

Фиксация местоположения………………………………………………………………………………………….. 236

Результаты EDA……………………………………………………………………………………………………………. 238

Краткие выводы……………………………………………………………………………………………………………………….. 239

Глава 11. Визуализация данных…………………………………………………………… 240

Выбор масштаба для выяснения структуры…………………………………………………………………………. 240

Заполнение области данных……………………………………………………………………………………….. 241

Учет нулевого значения……………………………………………………………………………………………….. 242

Выяснение формы данных с помощью преобразований………………………………………….. 244

Кренение для расшифровки взаимосвязей…………………………………………………………………. 246

Выявление взаимосвязей с помощью спрямления……………………………………………………… 247

Сглаживание и агрегирование данных………………………………………………………………………………….. 249

Методы сглаживания для определения формы данных……………………………………………. 250

Методы сглаживания для выявления взаимосвязей и тенденций…………………………….. 252

Настройка методов сглаживания……………………………………………………………………………….. 254

Сведение распределений к квантилям………………………………………………………………………… 255

Случаи, когда сглаживание нежелательно………………………………………………………………… 257

Упрощение значимых сравнений…………………………………………………………………………………………… 259

Подчеркивание важного различия……………………………………………………………………………… 259

Упорядочивание групп………………………………………………………………………………………………… 261

Отказ от стекинга………………………………………………………………………………………………………….. 263

Выбор цветовой палитры…………………………………………………………………………………………….. 265

Принципы проведения сравнений на графиках…………………………………………………………. 266

Учет особенностей исходных данных при визуализации……………………………………………………. 267

Данные, собранные с течением времени……………………………………………………………………. 268

Исследования по данным наблюдений………………………………………………………………………. 269

Неравномерная выборка……………………………………………………………………………………………… 271

Географические данные………………………………………………………………………………………………. 272

Добавление контекста…………………………………………………………………………………………………………….. 273

Пример: результаты 100-метрового спринта…………………………………………………………….. 273

Создание графиков с помощью plotly……………………………………………………………………………………. 275

Объекты Figure и Trace………………………………………………………………………………………………… 276

Изменение макета…………………………………………………………………………………………………………. 277

Функции построения графиков……………………………………………………………………………………. 279

Аннотации к изображению………………………………………………………………………………………….. 281

Другие инструменты визуализации……………………………………………………………………………………….. 282

Matplotlib………………………………………………………………………………………………………………………. 282

Грамматика графики……………………………………………………………………………………………………. 282

Краткие выводы……………………………………………………………………………………………………………………….. 283

Глава 12. Тематическое исследование: проверка точности показателей качества воздуха         285

Постановка вопроса, структура и охват данных…………………………………………………………………. 286

Поиск близко расположенных датчиков……………………………………………………………………………….. 288

Первичная обработка списка локаций AQS………………………………………………………………. 288

Первичная обработка списка локаций PurpleAir……………………………………………………….. 291

Сопоставление датчиков AQS и PurpleAir………………………………………………………………….. 292

Первичная обработка и очистка данных датчиков AQS……………………………………………………… 294

Проверка гранулярности……………………………………………………………………………………………… 295

Удаление ненужных столбцов…………………………………………………………………………………….. 296

Проверка достоверности дат………………………………………………………………………………………. 297

Проверка качества показателей PM2.5………………………………………………………………………. 298

Первичная обработка показаний датчиков PurpleAir…………………………………………………………… 299

Проверка гранулярности……………………………………………………………………………………………… 300

Визуализация временнх меток…………………………………………………………………………. 302

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

Обработка пропущенных значений……………………………………………………………………………. 305

Разведочный анализ показаний PurpleAir и AQS…………………………………………………………………… 306

Создание модели для корректировки показаний PurpleAir………………………………………………….. 312

Краткие выводы……………………………………………………………………………………………………………………….. 314

Часть IV. Другие источники данных…………………………………….. 317

Глава 13. Операции с текстом………………………………………………………………. 319

Примеры текстов и заданий……………………………………………………………………………………………………. 319

Преобразование текста в стандартный формат………………………………………………………… 319

Извлечение фрагмента текста для создания признака……………………………………………… 320

Преобразование текста в признаки…………………………………………………………………………….. 320

Анализ текста……………………………………………………………………………………………………………….. 321

Манипуляции со строками……………………………………………………………………………………………………… 322

Преобразование текста в стандартный формат с помощью строковых методов Python           322

Строковые методы в pandas………………………………………………………………………………………… 323

Извлечение фрагментов текста с помощью разделения строк…………………………………. 324

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

Конкатенация литералов…………………………………………………………………………………………….. 325

Классы символов………………………………………………………………………………………………….. 326

Символ подстановки……………………………………………………………………………………………. 327

Инвертированные классы символов…………………………………………………………………… 327

Сокращения классов символов…………………………………………………………………………… 327

Анкоры и границы………………………………………………………………………………………………… 327

Исключение метасимволов………………………………………………………………………………….. 328

Квантификаторы…………………………………………………………………………………………………………… 328

Создание признаков при помощи чередования и группировки……………………………….. 330

Справочные таблицы…………………………………………………………………………………………………… 331

Анализ текста…………………………………………………………………………………………………………………………… 333

Краткие выводы……………………………………………………………………………………………………………………….. 338

Глава 14. Обмен данными……………………………………………………………………. 339

Формат NetCDF………………………………………………………………………………………………………………………… 339

Формат JSON……………………………………………………………………………………………………………………………. 344

HTTP…………………………………………………………………………………………………………………………………………. 348

REST………………………………………………………………………………………………………………………………………….. 352

XML, HTML, XPath………………………………………………………………………………………………………………….. 356

Пример: веб-скрапинг результатов забегов из Википедии……………………………………….. 359

XPath……………………………………………………………………………………………………………………………… 361

Пример: доступ к курсам валют ЕЦБ…………………………………………………………………………. 363

Краткие выводы……………………………………………………………………………………………………………………….. 366

Часть V. Линейное моделирование………………………………………. 369

Глава 15. Линейные модели…………………………………………………………………. 371

Простая линейная модель……………………………………………………………………………………………………….. 372

Пример: простая линейная модель оценки качества воздуха……………………………………………… 375

Интерпретация линейных моделей…………………………………………………………………………….. 377

Оценка качества подгонки…………………………………………………………………………………………… 378

Подгонка простой линейной модели……………………………………………………………………………………… 379

Модель множественной линейной регрессии……………………………………………………………………….. 381

Подбор параметров модели множественной линейной регрессии……………………………………… 386

Пример: где находится страна возможностей?…………………………………………………………………….. 389

Объяснение восходящей мобильности на основе времени в пути на работу…………. 391

Связь восходящей мобильности с использованием нескольких переменных…………. 393

Конструирование признаков для числовых измерений……………………………………………………….. 397

Конструирование признаков для категориальных измерений……………………………………………. 401

Краткие выводы……………………………………………………………………………………………………………………….. 408

Глава 16. Выбор модели……………………………………………………………………….. 410

Переобучение…………………………………………………………………………………………………………………………… 411

Пример: энергопотребление………………………………………………………………………………………… 411

Метод train_test_split………………………………………………………………………………………………………………. 416

Перекрестная проверка…………………………………………………………………………………………………………… 420

Регуляризация………………………………………………………………………………………………………………………….. 425

Смещение и дисперсия модели……………………………………………………………………………………………….. 426

Краткие выводы……………………………………………………………………………………………………………………….. 429

Глава 17. Теория логического вывода и прогнозирования…………………… 431

Распределения: популяционное, эмпирическое, выборочное……………………………………………… 431

Принципы проверки гипотез…………………………………………………………………………………………………… 433

Пример: ранговый критерий сравнения продуктивности соавторов Википедии…… 435

Пример: проверка эффективности вакцины с помощью пропорций………………………… 439

Бутстрап-процедура построения выводов……………………………………………………………………………. 441

Доверительный интервал………………………………………………………………………………………………………… 446

Интервал прогнозирования…………………………………………………………………………………………………….. 449

Пример: прогнозирование опоздания автобуса………………………………………………………… 449

Пример: прогнозирование размера краба………………………………………………………………….. 450

Пример: прогнозирование прироста краба……………………………………………………………….. 451

Вероятность выводов и прогнозов…………………………………………………………………………………………. 454

Формализация теории для статистик средних рангов………………………………………………. 454

Общие свойства случайных величин………………………………………………………………………….. 457

Вероятность в основе интервалов и тестирования……………………………………………………. 459

Вероятность в основе выбора модели………………………………………………………………………… 462

Краткие выводы……………………………………………………………………………………………………………………….. 464

Глава 18. Тематическое исследование: как взвесить осла……………………. 466

Постановка вопроса и охват данных…………………………………………………………………………………….. 466

Первичная обработка и преобразование данных………………………………………………………………… 467

Разведочный анализ данных………………………………………………………………………………………………….. 472

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

Функция потерь при назначении анестетиков…………………………………………………………… 475

Построение простой линейной модели………………………………………………………………………. 476

Подгонка множественной линейной модели……………………………………………………………… 478

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

Оценка модели………………………………………………………………………………………………………………. 482

Краткие выводы……………………………………………………………………………………………………………………….. 484

Часть VI. Классификация………………………………………………………….. 487

Глава 19. Классификация…………………………………………………………………….. 489

Пример: поваленные ураганом деревья………………………………………………………………………………… 489

Моделирование и классификация………………………………………………………………………………………….. 492

Константная модель…………………………………………………………………………………………………….. 492

Исследование взаимосвязи между буреломом и размером деревьев………………………. 493

Моделирование долей (и вероятностей)……………………………………………………………………………….. 495

Логистическая модель………………………………………………………………………………………………….. 496

Логарифм отношения шансов……………………………………………………………………………………… 497

Применение логистической кривой…………………………………………………………………………….. 498

Функция потерь для логистической модели………………………………………………………………………….. 499

От вероятностей к классификации…………………………………………………………………………………………. 502

Матрица несоответствий…………………………………………………………………………………………….. 504

Точность и полнота……………………………………………………………………………………………………… 505

Краткие выводы……………………………………………………………………………………………………………………….. 508

Глава 20. Численная оптимизация……………………………………………………….. 509

Основы градиентного спуска………………………………………………………………………………………………….. 510

Минимизация потери Хубера…………………………………………………………………………………………………. 512

Выпуклые и дифференцируемые функции потерь………………………………………………………………… 514

Варианты градиентного спуска……………………………………………………………………………………………… 515

Стохастический градиентный спуск…………………………………………………………………………… 516

Мини-пакетный градиентный спуск…………………………………………………………………………… 517

Метод Ньютона……………………………………………………………………………………………………………. 517

Краткие выводы……………………………………………………………………………………………………………………….. 518

Глава 21. Тематическое исследование: распознавание
фейковых новостей………………………………………………………………………………. 520

Уточнение вопроса и выяснение охвата данных………………………………………………………………….. 521

Получение и “выпас” данных…………………………………………………………………………………………………. 522

Разведочный анализ данных………………………………………………………………………………………………….. 526

Разведочный анализ источников публикаций…………………………………………………………… 527

Разведочный анализ даты публикации………………………………………………………………………. 529

Разведочный анализ слов в статье……………………………………………………………………………… 530

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

Однословная модель…………………………………………………………………………………………………….. 532

Многословная модель………………………………………………………………………………………………….. 534

Прогнозирование с помощью преобразования TF-IDF…………………………………………….. 536

Краткие выводы……………………………………………………………………………………………………………………….. 539

Приложение 1. Дополнительный материал…………………………………………… 541

Приложение 2. Источники данных………………………………………………………. 548

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

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

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

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

Новинка: “Экскурс в неопределенное поведение C++”

Экскурс в неопределенное поведение C++

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

Для специалистов по C++ и другим языкам для системного и низкоуровневого программирования

Вы изучили C++ за 21 день и уже готовы использовать его во всех своих проектах? Погодите, есть кое-что еще!

За последние годы особенно остро поднят вопрос безопасности при разработке программного обеспечения: операционных систем, драйверов, веб-серверов и облачных платформ. C++ считается одним из самых небезопасных языков программирования, который широко используются в реальных программах. С 2023 года звучат призывы избегать языка C++ из-за того, что в нём не гарантирована безопасность памяти: 70% всех уязвимостей в программном обеспечении так или иначе оказывались связаны с работой с памятью.

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

  • Десятки историй о неоднозначных и сомнительных решениях в дизайне языка С++, приводящих к многим часам отладки в реальных проектах
  • Самые неожиданные ошибки и как они проявляются
  • Советы как избежать встречи с одним из самых загадочных “зверей” в разработке на C++ и других языках для системного и низкоуровневого программирования — неопределенным поведением

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

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

Встречайте: “Django 5. Практика создания веб-сайтов на Python”

Django 5. Практика создания веб-сайтов на Python

Книга посвящена разработке веб-сайтов на языке Python с применением веб-фреймворка Django 5.1. Представлены новинки Django и дано наиболее полное описание его инструментов и средств: моделей, миграций, контролеров, шаблонов, обработки пользовательского ввода, разграничения доступа, посредников, сигналов, отправки электронной почты, локализации, кеширования, работы с базами данных PostgreSQL, поддержке нескольких веб-сайтов, простых страниц, статичных перенаправлений, жетонной аутентификации и др.  Описаны полезные дополнительные библиотеки, реализующие обработку BBCode, CAPTCHA, вывод графических миниатюр, интеграцию с Bootstrap. Рассказано о программировании веб-служб REST, настройке встроенного административного веб-сайта и публикации готового сайта посредством веб-серверов Uvicorn и Apache HTTP Server. Подробно описано создание полнофункционального веб-сайта — электронной доски объявлений.

Электронное приложение-архив на сайте издательства содержит коды всех примеров.

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

Python и Django — веб-разработка на современном уровне

Что такое веб-фреймворк?

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

  • взаимодействие с базой данных — посредством единых инструментов, независимых от конкретной СУБД;
  • обработка клиентских запросов — в частности, определение, какая страница запрашивается;
  • генерирование запрашиваемых веб-страниц на основе шаблонов;
  • разграничение доступа — допуск к закрытым страницам только зарегистрированных пользователей и только после выполнения ими входа;
  • обработка данных, занесенных посетителями в веб-формы, — в частности, проверка их на корректность;
  • получение и сохранение файлов, выгруженных пользователями;
  • рассылка электронных писем;
  • кеширование сгенерированных страниц на стороне сервера — для повышения производительности;
  • локализация — перевод сайта на другие языки.

Внимание

Автор предполагает, что читатели этой книги знакомы с языками HTML, CSS, JavaScript, Python, принципами работы СУБД и имеют базовые навыки в веб-разработке. В книге все это описываться не будет.

Django — популярнейший в мире веб-фреймворк, написанный на языке Python, и один из наиболее распространенных веб-фреймворков в мире. Появившись в 2005 году — именно тогда вышла его первая версия, — он до сих пор остается «на коне».

Фреймвок получил название в честь французского джазового гитариста-виртуоза Джанго Рейнхардт (цыг. Django Reinhardt; настоящее имя Жан Ренарт, фр. Jean Reinhardt; 23 января 1910 — 16 мая 1953). Прозвище Рейнхардта «Django» на цыганском языке означает «я проснулся».

Книгу “Django 5. Практика создания веб-сайтов на Python” можно купить в нашем интенет-магазине.

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

Что такое веб-фреймворк?…………………………………………………………………………………………………………. 19

Почему Django?………………………………………………………………………………………………………………………….. 20

Что нового в Django 5.1 и этой книге?……………………………………………………………………………………… 21

Использованные программные продукты……………………………………………………………………………….. 22

Типографские соглашения………………………………………………………………………………………………………… 22

Часть I. Вводный курс…………………………………………………………………… 25

Глава 1. Основные понятия Django. Вывод данных………………………………. 26

1.1. Установка фреймворка……………………………………………………………………………………………………….. 26

1.2. Проект Django……………………………………………………………………………………………………………………… 27

1.3. Отладочный веб-сервер Django…………………………………………………………………………………………. 28

1.4. Приложения…………………………………………………………………………………………………………………………. 29

1.5. Контроллеры……………………………………………………………………………………………………………………….. 31

1.6. Маршруты и маршрутизатор…………………………………………………………………………………………….. 32

1.7. Модели…………………………………………………………………………………………………………………………………. 35

1.8. Миграции…………………………………………………………………………………………………………………………….. 37

1.9. Консоль Django…………………………………………………………………………………………………………………… 39

1.10. Работа с моделями……………………………………………………………………………………………………………. 39

1.11. Шаблоны……………………………………………………………………………………………………………………………. 43

1.12. Контекст шаблона, рендеринг и сокращения…………………………………………………………………. 44

1.13. Административный веб-сайт Django………………………………………………………………………………. 46

1.14. Параметры полей и моделей……………………………………………………………………………………………. 51

1.15. Редактор модели……………………………………………………………………………………………………………….. 52

Глава 2. Связи. Ввод данных. Статические файлы………………………………… 54

2.1. Связи между моделями……………………………………………………………………………………………………….. 54

2.2. Строковое представление модели…………………………………………………………………………………….. 56

2.3. URL-параметры и параметризованные запросы……………………………………………………………… 57

2.4. Обратное разрешение интернет-адресов………………………………………………………………………….. 61

2.5. Формы, связанные с моделями…………………………………………………………………………………………… 63

2.6. Контроллеры-классы………………………………………………………………………………………………………….. 63

2.7. Наследование шаблонов……………………………………………………………………………………………………. 66

2.8. Статические файлы…………………………………………………………………………………………………………….. 69

Часть II. Базовые инструменты Django………………………………… 73

Глава 3. Создание и настройка проекта…………………………………………………. 74

3.1. Подготовка к работе…………………………………………………………………………………………………………… 74

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

3.3. Настройки проекта……………………………………………………………………………………………………………… 76

3.3.1. Основные настройки…………………………………………………………………………………………………….. 76

3.3.2. Параметры баз данных………………………………………………………………………………………………… 77

3.3.3. Список зарегистрированных приложений………………………………………………………………….. 79

3.3.4. Список зарегистрированных посредников…………………………………………………………………. 80

3.3.5. Языковые настройки…………………………………………………………………………………………………….. 82

3.3.6. Доступ к настройкам проекта из программного кода……………………………………………….. 85

3.3.7. Создание собственных настроек проекта…………………………………………………………………… 85

3.4. Создание, настройка и регистрация приложений……………………………………………………………. 86

3.4.1. Создание приложений………………………………………………………………………………………………….. 86

3.4.2. Настройки приложений………………………………………………………………………………………………… 86

3.4.3. Регистрация приложений в проекте…………………………………………………………………………….. 87

3.5. Средства отладки……………………………………………………………………………………………………………….. 88

3.5.1. Отладочный веб-сервер Django…………………………………………………………………………………… 88

3.5.2. Веб-страница сообщения об ошибке…………………………………………………………………………… 89

3.6. Работа с несколькими базами данных………………………………………………………………………………. 91

3.6.1. Регистрация используемых баз данных……………………………………………………………………… 91

3.6.2. Диспетчеризация данных…………………………………………………………………………………………….. 92

3.6.2.1. Автоматическая диспетчеризация данных……………………………………………………….. 92

3.6.2.2. Указание базы данных в административных командах………………………………….. 95

3.6.2.3. Ручная диспетчеризация данных………………………………………………………………………. 96

Глава 4. Модели: базовые инструменты…………………………………………………. 97

4.1. Объявление моделей…………………………………………………………………………………………………………… 97

4.2. Объявление полей модели………………………………………………………………………………………………….. 98

4.2.1. Параметры, поддерживаемые полями всех типов……………………………………………………… 98

4.2.2. Классы полей моделей……………………………………………………………………………………………….. 101

4.2.3. Создание полей со списком……………………………………………………………………………………….. 105

4.3. Создание связей между моделями…………………………………………………………………………………… 109

4.3.1. Связь «один-со-многими»……………………………………………………………………………………………. 109

4.3.2. Связь «один-с-одним»…………………………………………………………………………………………………. 113

4.3.3. Связь «многие-со-многими»………………………………………………………………………………………… 114

4.4. Параметры самой модели………………………………………………………………………………………………… 116

4.4.1. Получение доступа к параметрам модели из программного кода…………………………. 123

4.5. Интернет-адрес модели и его формирование…………………………………………………………………. 124

4.6. Методы модели…………………………………………………………………………………………………………………. 125

4.7. Валидация модели. Валидаторы…………………………………………………………………………………….. 127

4.7.1. Стандартные валидаторы Django…………………………………………………………………………….. 127

4.7.2. Вывод собственных сообщений об ошибках……………………………………………………………. 132

4.7.3. Написание своих валидаторов………………………………………………………………………………….. 133

4.7.4. Валидация модели………………………………………………………………………………………………………. 134

4.8. Создание моделей на основе существующих баз данных……………………………………………. 136

Глава 5. Миграции……………………………………………………………………………….. 137

5.1. Генерирование миграций…………………………………………………………………………………………………. 137

5.2. Модули миграций……………………………………………………………………………………………………………… 139

5.3. Выполнение миграций……………………………………………………………………………………………………… 139

5.4. Вывод списка миграций……………………………………………………………………………………………………. 141

5.5. Оптимизация миграций…………………………………………………………………………………………………….. 142

5.6. Слияние миграций…………………………………………………………………………………………………………….. 142

5.7. Очистка моделей……………………………………………………………………………………………………………….. 143

5.8. Отмена миграций………………………………………………………………………………………………………………. 144

Глава 6. Запись данных……………………………………………………………………….. 145

6.1. Правка записей………………………………………………………………………………………………………………….. 145

6.2. Создание записей……………………………………………………………………………………………………………… 146

6.3. Занесение значений в поля разных типов………………………………………………………………………. 147

6.4. Сохранение записей…………………………………………………………………………………………………………. 150

6.4.1. Сохранение копий записей в разных базах данных………………………………………………… 151

6.5. Удаление записей……………………………………………………………………………………………………………… 151

6.6. Обработка связанных записей…………………………………………………………………………………………. 152

6.6.1. Обработка связи «один-со-многими»………………………………………………………………………… 152

6.6.2. Обработка связи «один-с-одним»………………………………………………………………………………. 154

6.6.3. Обработка связи «многие-со-многими»…………………………………………………………………….. 155

6.7. Произвольное переупорядочивание записей…………………………………………………………………. 156

6.8. Массовые добавление, правка и удаление записей………………………………………………………. 157

6.9. Выполнение валидации модели………………………………………………………………………………………. 160

6.10. Асинхронная запись данных…………………………………………………………………………………………. 161

Глава 7. Выборка данных…………………………………………………………………….. 162

7.1. Извлечение значений из полей записи…………………………………………………………………………….. 162

7.1.1. Извлечение значений из полей разных типов…………………………………………………………… 162

7.2. Доступ к связанным записям……………………………………………………………………………………………. 163

7.3. Выборка записей………………………………………………………………………………………………………………. 165

7.3.1. Выборка всех записей………………………………………………………………………………………………… 165

7.3.2. Извлечение одной записи…………………………………………………………………………………………… 166

7.3.3. Получение числа записей в наборе…………………………………………………………………………… 167

7.3.4. Поиск записи……………………………………………………………………………………………………………….. 168

7.3.5. Фильтрация записей……………………………………………………………………………………………………. 169

7.3.6. Написание условий фильтрации……………………………………………………………………………….. 170

7.3.6.1. Написание условий фильтрации по значениям полей связанных записей….. 173

7.3.6.2. Написание условий фильтрации по значениям полей типа JSON………………… 174

7.3.6.3. Сравнение со значениями других полей. Функциональные выражения……… 176

7.3.6.4. Сложные условия фильтрации. Выражения сравнения…………………………………. 177

7.3.7. Выборка уникальных записей…………………………………………………………………………………… 179

7.3.8. Выборка указанного числа записей………………………………………………………………………….. 179

7.3.9. Экономная выборка записей……………………………………………………………………………………… 179

7.4. Сортировка записей………………………………………………………………………………………………………….. 180

7.5. Агрегатные вычисления……………………………………………………………………………………………………. 182

7.5.1. Агрегатные вычисления по всем записям набора……………………………………………………. 182

7.5.2. Агрегатные вычисления по связанным записям……………………………………………………….. 183

7.5.3. Агрегатные функции…………………………………………………………………………………………………… 185

7.6. Оконные вычисления………………………………………………………………………………………………………… 187

7.6.1. Выполнение оконных вычислений……………………………………………………………………………. 187

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

7.6.3. Оконные функции………………………………………………………………………………………………………… 194

7.7. Вычисляемые поля уровня запроса………………………………………………………………………………… 196

7.8. Функциональные выражения: расширенные инструменты………………………………………….. 197

7.8.1. Функции СУБД……………………………………………………………………………………………………………. 197

7.8.1.1. Функции для работы со строками……………………………………………………………………. 197

7.8.1.2. Функции для работы с числами……………………………………………………………………….. 200

7.8.1.3. Функции для работы с датой и временем……………………………………………………….. 202

7.8.1.4. Функции для сравнения и преобразования значений…………………………………….. 204

7.8.2. Условные выражения СУБД………………………………………………………………………………………. 206

7.8.3. Вложенные запросы……………………………………………………………………………………………………. 207

7.8.4. Извлечение значений из полей типа JSON………………………………………………………………… 208

7.9. Объединение наборов записей………………………………………………………………………………………… 209

7.10. Извлечение значений только из заданных полей…………………………………………………………. 210

7.11. Указание базы данных для выборки записей………………………………………………………………. 213

7.12. Асинхронная выборка данных………………………………………………………………………………………. 213

Глава 8. Маршрутизация……………………………………………………………………… 215

8.1. Как работает маршрутизатор?……………………………………………………………………………………….. 215

8.1.1. Списки маршрутов уровня проекта и уровня приложения……………………………………… 216

8.2. Объявление маршрутов……………………………………………………………………………………………………. 217

8.3. Передача данных в контроллеры……………………………………………………………………………………. 219

8.4. Именованные маршруты………………………………………………………………………………………………….. 220

8.5. Имена приложений……………………………………………………………………………………………………………. 220

8.6. Псевдонимы приложений…………………………………………………………………………………………………. 221

8.7. Указание шаблонных путей в виде регулярных выражений………………………………………… 222

8.8. Настройки маршрутизатора……………………………………………………………………………………………. 223

Глава 9. Контроллеры-функции…………………………………………………………… 224

9.1. Написание контроллеров-функций…………………………………………………………………………………. 224

9.1.1. Контроллеры, выполняющие одну задачу……………………………………………………………….. 225

9.1.2. Контроллеры, выполняющие несколько задач………………………………………………………… 226

9.2. Получение сведений о запросе………………………………………………………………………………………… 227

9.3. Формирование ответа………………………………………………………………………………………………………. 230

9.3.1. Низкоуровневые средства для формирования ответа……………………………………………… 230

9.3.2. Формирование ответа на основе шаблона……………………………………………………………….. 231

9.3.3. Класс TemplateResponse: отложенный рендеринг шаблонов…………………………………. 233

9.4. Перенаправление………………………………………………………………………………………………………………. 234

9.5. Обратное разрешение интернет-адресов……………………………………………………………………….. 235

9.6. Уведомление об ошибках и особых ситуациях……………………………………………………………… 237

9.7. Специальные ответы………………………………………………………………………………………………………… 238

9.7.1. Потоковый ответ…………………………………………………………………………………………………………. 238

9.7.2. Файловый ответ…………………………………………………………………………………………………………… 239

9.7.3. JSON-ответ…………………………………………………………………………………………………………………… 240

9.8. Сокращения Django………………………………………………………………………………………………………….. 240

9.9. Программное разрешение интернет-адресов…………………………………………………………………. 242

9.10. Дополнительные настройки контроллеров………………………………………………………………….. 243

9.11. Асинхронные контроллеры-функции……………………………………………………………………………. 244

9.11.1. Преобразование синхронных функций в асинхронные и наоборот…………………….. 245

9.11.2. Обработка прерываний……………………………………………………………………………………………. 247

9.12. Асинхронные инструменты для формирования ответов…………………………………………….. 247

Глава 10. Контроллеры-классы……………………………………………………………. 249

10.1. Введение в контроллеры-классы…………………………………………………………………………………… 249

10.2. Базовые контроллеры-классы……………………………………………………………………………………….. 250

10.2.1. Контроллер View: диспетчеризация по HTTP-методу…………………………………………… 250

10.2.2. Примесь ContextMixin: создание контекста шаблона…………………………………………… 252

10.2.3. Примесь TemplateResponseMixin: рендеринг шаблона………………………………………….. 252

10.2.4. Контроллер TemplateView: все вместе…………………………………………………………………….. 253

10.3. Классы, выводящие одну запись…………………………………………………………………………………… 254

10.3.1. Примесь SingleObjectMixin: поиск записи………………………………………………………………. 254

10.3.2. Примесь SingleObjectTemplateResponseMixin: рендеринг шаблона
на основе найденной записи………………………………………………………………………………………………… 255

10.3.3. Контроллер DetailView: все вместе…………………………………………………………………………. 256

10.4. Классы, выводящие наборы записей…………………………………………………………………………….. 257

10.4.1. Примесь MultipleObjectMixin: извлечение набора записей………………………………….. 258

10.4.2. Примесь MultipleObjectTemplateResponseMixin: рендеринг шаблона
на основе набора записей……………………………………………………………………………………………………. 260

10.4.3. Контроллер ListView: все вместе……………………………………………………………………………… 261

10.5. Классы, работающие с формами…………………………………………………………………………………… 261

10.5.1. Классы для вывода и валидации форм…………………………………………………………………… 262

10.5.1.1. Примесь FormMixin: создание формы…………………………………………………………… 262

10.5.1.2. Контроллер ProcessFormView: вывод и обработка формы…………………………. 263

10.5.1.3. Контроллер-класс FormView: создание, вывод и обработка формы………….. 264

10.5.2. Классы для добавления, правки и удаления записей……………………………………………. 265

10.5.2.1. Примесь ModelFormMixin: создание формы, связанной с моделью…………… 265

10.5.2.2. Контроллер CreateView: создание новой записи…………………………………………. 266

10.5.2.3. Контроллер UpdateView: исправление записи…………………………………………….. 267

10.5.2.4. Примесь DeletionMixin: удаление записи……………………………………………………… 268

10.5.2.5. Контроллер DeleteView: удаление записи с подтверждением……………………. 268

10.6. Классы для вывода хронологических списков…………………………………………………………….. 270

10.6.1. Вывод последних записей………………………………………………………………………………………… 270

10.6.1.1. Примесь DateMixin: фильтрация записей по дате………………………………………… 270

10.6.1.2. Контроллер BaseDateListView: базовый класс…………………………………………….. 271

10.6.1.3. Контроллер ArchiveIndexView: вывод последних записей………………………….. 272

10.6.2. Вывод записей по годам…………………………………………………………………………………………… 273

10.6.2.1. Примесь YearMixin: извлечение года…………………………………………………………….. 273

10.6.2.2. Контроллер YearArchiveView: вывод записей за год……………………………………. 274

10.6.3. Вывод записей по месяцам………………………………………………………………………………………. 275

10.6.3.1. Примесь MonthMixin: извлечение месяца……………………………………………………… 275

10.6.3.2. Контроллер MonthArchiveView: вывод записей за месяц……………………………. 275

10.6.4. Вывод записей по неделям……………………………………………………………………………………….. 276

10.6.4.1. Примесь WeekMixin: извлечение номера недели………………………………………….. 276

10.6.4.2. Контроллер WeekArchiveView: вывод записей за неделю…………………………… 277

10.6.5. Вывод записей по дням…………………………………………………………………………………………….. 277

10.6.5.1. Примесь DayMixin: извлечение заданного числа…………………………………………. 278

10.6.5.2. Контроллер DayArchiveView: вывод записей за день………………………………….. 278

10.6.6. Контроллер TodayArchiveView: вывод записей за текущее число……………………….. 279

10.6.7. Контроллер DateDetailView: вывод одной записи за указанное число……………….. 279

10.7. Контроллер RedirectView: перенаправление……………………………………………………………….. 280

10.8. Контроллеры-классы смешанной функциональности………………………………………………… 282

10.9. Асинхронные контроллеры-классы………………………………………………………………………………. 283

Глава 11. Шаблоны и статические файлы: базовые инструменты……….. 285

11.1. Настройки проекта, касающиеся шаблонов………………………………………………………………… 285

11.2. Вывод данных. Директивы…………………………………………………………………………………………….. 290

11.3. Теги шаблонизатора………………………………………………………………………………………………………. 291

11.4. Фильтры…………………………………………………………………………………………………………………………… 300

11.5. Наследование шаблонов……………………………………………………………………………………………….. 310

11.6. Включение шаблонов…………………………………………………………………………………………………….. 312

11.7. Обработка статических файлов…………………………………………………………………………………….. 312

11.7.1. Настройка подсистемы статических файлов…………………………………………………………. 312

11.7.2. Формирование интернет-адресов статических файлов………………………………………… 314

11.8. Вывод значений в «человеческом» представлении……………………………………………………… 316

Глава 12. Пагинатор…………………………………………………………………………….. 318

12.1. Класс Paginator: сам пагинатор. Создание пагинатора…………………………………………….. 318

12.2. Класс Page: часть пагинатора. Вывод пагинатора…………………………………………………….. 321

Глава 13. Формы, связанные с моделями……………………………………………… 323

13.1. Создание форм, связанных с моделями………………………………………………………………………… 323

13.1.1. Создание форм с помощью фабрики классов…………………………………………………………. 323

13.1.2. Создание форм путем быстрого объявления………………………………………………………….. 326

13.1.3. Создание форм путем полного объявления……………………………………………………………. 327

13.1.3.1. Как выполняется полное объявление?………………………………………………………….. 327

13.1.3.2. Параметры, поддерживаемые всеми типами полей формы………………………… 329

13.1.3.3. Классы полей форм…………………………………………………………………………………………. 330

13.1.3.4. Классы полей форм, применяемые по умолчанию………………………………………. 334

13.1.4. Задание элементов управления……………………………………………………………………………….. 335

13.1.4.1. Классы элементов управления………………………………………………………………………. 335

13.1.4.2. Элементы управления, применяемые по умолчанию………………………………….. 338

13.2. Обработка форм……………………………………………………………………………………………………………… 339

13.2.1. Добавление записи посредством формы………………………………………………………………… 339

13.2.1.1. Создание формы для добавления записи……………………………………………………… 339

13.2.1.2. Повторное создание формы……………………………………………………………………………. 339

13.2.1.3. Валидация данных, занесенных в форму……………………………………………………… 340

13.2.1.4. Сохранение данных, занесенных в форму……………………………………………………. 341

13.2.1.5. Доступ к данным, занесенным в форму…………………………………………………………. 342

13.2.2. Правка записи посредством формы………………………………………………………………………… 342

13.2.3. Некоторые соображения касательно удаления записей………………………………………. 343

13.3. Вывод форм на экран……………………………………………………………………………………………………… 344

13.3.1. Быстрый вывод форм………………………………………………………………………………………………… 344

13.3.2. Расширенный вывод форм……………………………………………………………………………………….. 346

13.3.2.1. Расширенный вывод форм: высокоуровневые инструменты………………………. 346

13.3.2.2. Расширенный вывод форм: низкоуровневые инструменты…………………………. 347

13.4. Валидация в формах………………………………………………………………………………………………………. 350

13.4.1. Валидация полей формы………………………………………………………………………………………….. 350

13.4.1.1. Валидация с применением валидаторов………………………………………………………. 350

13.4.1.2. Валидация путем переопределения методов формы…………………………………… 351

13.4.2. Валидация формы…………………………………………………………………………………………………….. 351

Глава 14. Наборы форм, связанные с моделями……………………………………. 353

14.1. Создание наборов форм, связанных с моделями…………………………………………………………. 353

14.2. Обработка наборов форм, связанных с моделями……………………………………………………….. 357

14.2.1. Создание набора форм, связанного с моделью……………………………………………………… 357

14.2.2. Повторное создание набора форм…………………………………………………………………………… 357

14.2.3. Валидация и сохранение набора форм…………………………………………………………………… 358

14.2.4. Доступ к данным, занесенным в набор форм…………………………………………………………. 358

14.2.5. Реализация переупорядочивания записей……………………………………………………………… 359

14.3. Вывод наборов форм на экран………………………………………………………………………………………. 361

14.3.1. Быстрый вывод наборов форм…………………………………………………………………………………. 361

14.3.2. Расширенный вывод наборов форм………………………………………………………………………… 362

14.4. Валидация в наборах форм……………………………………………………………………………………………. 363

14.5. Встроенные наборы форм……………………………………………………………………………………………… 364

14.5.1. Создание встроенных наборов форм………………………………………………………………………. 364

14.5.2. Обработка встроенных наборов форм……………………………………………………………………. 365

Глава 15. Разграничение доступа: базовые инструменты…………………….. 367

15.1. Как работает подсистема разграничения доступа?……………………………………………………. 367

15.2. Подготовка подсистемы разграничения доступа………………………………………………………… 368

15.2.1. Настройка подсистемы разграничения доступа……………………………………………………. 368

15.2.2. Создание суперпользователя…………………………………………………………………………………… 369

15.2.3. Смена пароля пользователя…………………………………………………………………………………….. 370

15.3. Работа со списками пользователей и групп…………………………………………………………………. 370

15.3.1. Список пользователей………………………………………………………………………………………………. 370

15.3.2. Группы пользователей. Список групп…………………………………………………………………….. 372

15.4. Вход, выход и служебные процедуры………………………………………………………………………….. 373

15.4.1. Контроллер LoginView: вход на сайт……………………………………………………………………… 373

15.4.2. Контроллер LogoutView: выход с сайта…………………………………………………………………. 375

15.4.3. Контроллер PasswordChangeView: смена пароля…………………………………………………. 377

15.4.4. Контроллер PasswordChangeDoneView: уведомление об успешной смене пароля 378

15.4.5. Контроллер PasswordResetView: отправка письма для сброса пароля……………….. 378

15.4.6. Контроллер PasswordResetDoneView: уведомление об отправке письма для сброса пароля              380

15.4.7. Контроллер PasswordResetConfirmView: собственно сброс пароля……………………. 381

15.4.8. Контроллер PasswordResetCompleteView: уведомление об успешном сбросе пароля……….. 382

15.5. Получение сведений о пользователях…………………………………………………………………………… 383

15.5.1. Получение сведений о текущем пользователе……………………………………………………….. 383

15.5.2. Получение пользователей, обладающих заданным правом………………………………… 386

15.6. Авторизация…………………………………………………………………………………………………………………….. 387

15.6.1. Авторизация на уровне всего веб-сайта…………………………………………………………………. 387

15.6.2. Авторизация в контроллерах…………………………………………………………………………………… 389

15.6.2.1. Авторизация в контроллерах-функциях: непосредственные проверки……… 389

15.6.2.2. Авторизация в контроллерах-функциях: применение декораторов…………… 390

15.6.2.3. Авторизация в контроллерах-классах………………………………………………………….. 392

15.6.3. Авторизация в шаблонах…………………………………………………………………………………………. 394

15.7. Асинхронные инструменты для разграничения доступа……………………………………………. 395

Часть III. Расширенные инструменты
и дополнительные библиотеки…………………………………………….. 397

Глава 16. Модели: расширенные инструменты…………………………………….. 398

16.1. Управление выборкой полей…………………………………………………………………………………………. 398

16.2. Связи «многие-со-многими» с дополнительными данными………………………………………… 402

16.3. Полиморфные связи………………………………………………………………………………………………………… 405

16.4. Наследование моделей…………………………………………………………………………………………………… 411

16.4.1. Прямое наследование моделей………………………………………………………………………………… 411

16.4.2. Абстрактные модели………………………………………………………………………………………………… 414

16.4.3. Прокси-модели………………………………………………………………………………………………………….. 416

16.5. Создание своих диспетчеров записей…………………………………………………………………………… 416

16.5.1. Создание диспетчеров записей……………………………………………………………………………….. 416

16.5.2. Создание диспетчеров обратной связи…………………………………………………………………… 418

16.6. Создание своих наборов записей………………………………………………………………………………….. 419

16.7. Управление транзакциями……………………………………………………………………………………………… 422

16.7.1. Автоматическое управление транзакциями…………………………………………………………… 422

16.7.1.1. Режим по умолчанию: каждая операция — в отдельной транзакции………… 422

16.7.1.2. Режим атомарных запросов…………………………………………………………………………… 423

16.7.1.3. Режим по умолчанию на уровне контроллера……………………………………………… 423

16.7.1.4. Режим атомарных запросов на уровне контроллера…………………………………… 424

16.7.2. Ручное управление транзакциями…………………………………………………………………………… 426

16.7.3. Обработка подтверждений транзакций………………………………………………………………….. 427

16.8. Отправка SQL-запросов, написанных вручную…………………………………………………………… 428

16.8.1. Отправка SQL-запросов на выборку записей из заданной модели………………………. 428

16.8.2. Отправка произвольных SQL-запросов………………………………………………………………….. 429

Глава 17. Формы и наборы форм: расширенные инструменты и дополнительная библиотека  432

17.1. Формы, не связанные с моделями………………………………………………………………………………….. 432

17.2. Наборы форм, не связанные с моделями………………………………………………………………………. 433

17.3. Расширенные средства для вывода форм и наборов форм…………………………………………. 435

17.3.1. Указание CSS-стилей у форм…………………………………………………………………………………… 435

17.3.2. Настройка выводимых форм……………………………………………………………………………………. 435

17.3.3. Настройка наборов форм…………………………………………………………………………………………. 436

17.3.4. Шаблоны форм, наборов форм и элементов управления……………………………………… 438

17.3.4.1. Шаблоны форм………………………………………………………………………………………………… 438

17.3.4.2. Шаблоны наборов форм…………………………………………………………………………………. 440

17.3.4.3. Шаблон поля формы……………………………………………………………………………………….. 441

17.3.4.4. Шаблоны элементов управления…………………………………………………………………… 441

17.4. Библиотека Django Simple Captcha: поддержка CAPTCHA……………………………………….. 443

17.4.1. Установка Django Simple Captcha…………………………………………………………………………… 443

17.4.2. Использование Django Simple Captcha…………………………………………………………………… 444

17.4.3. Настройка Django Simple Captcha………………………………………………………………………….. 445

17.4.4. Дополнительная команда captcha_clean……………………………………………………………….. 447

17.5. Дополнительные настройки проекта, имеющие отношение к формам……………………… 447

Глава 18. Поддержка баз данных PostgreSQL и библиотека
django-localflavor………………………………………………………………………………….. 448

18.1. Дополнительные инструменты для работы с PostgreSQL…………………………………………… 448

18.1.1. Объявление моделей для работы с PostgreSQL………………………………………………………. 448

18.1.1.1. Поля, специфичные для PostgreSQL……………………………………………………………….. 448

18.1.1.2. Индексы PostgreSQL………………………………………………………………………………………… 451

18.1.1.3. Операционные выражения……………………………………………………………………………… 453

18.1.1.4. Условие ExclusionConstraint………………………………………………………………………….. 453

18.1.1.5. Расширения PostgreSQL………………………………………………………………………………….. 455

18.1.1.6. Валидаторы PostgreSQL…………………………………………………………………………………. 457

18.1.2. Запись и выборка данных в PostgreSQL………………………………………………………………….. 459

18.1.2.1. Запись и выборка значений полей в PostgreSQL…………………………………………… 459

18.1.2.2. Фильтрация записей в PostgreSQL…………………………………………………………………. 461

18.1.3. Агрегатные функции PostgreSQL……………………………………………………………………………… 467

18.1.4. Функции СУБД, специфичные для PostgreSQL……………………………………………………….. 470

18.1.5. Вложенные запросы PostgreSQL……………………………………………………………………………… 470

18.1.6. Полнотекстовая фильтрация PostgreSQL………………………………………………………………… 471

18.1.6.1. Модификатор search……………………………………………………………………………………….. 472

18.1.6.2. Функции СУБД для полнотекстовой фильтрации………………………………………… 472

18.1.6.3. Функции СУБД для фильтрации по похожим словам………………………………….. 477

18.1.7. Создание форм для работы с PostgreSQL……………………………………………………………….. 479

18.1.7.1. Поля форм, специфичные для PostgreSQL……………………………………………………… 479

18.1.7.2. Элементы управления, специфичные для PostgreSQL………………………………….. 481

18.2. Библиотека django-localflavor: дополнительные поля для моделей и форм……………… 481

18.2.1. Установка django-localflavor……………………………………………………………………………………. 482

18.2.2. Поля модели, предоставляемые django-localflavor………………………………………………… 482

18.2.3. Поля формы, предоставляемые django-localflavor…………………………………………………. 483

18.2.4. Элементы управления, предоставляемые django-localflavor………………………………… 483

Глава 19. Шаблоны: расширенные инструменты
и дополнительные библиотеки…………………………………………………………….. 484

19.1. Библиотека django-precise-bbcode: поддержка BBCode……………………………………………… 484

19.1.1. Установка django-precise-bbcode…………………………………………………………………………….. 484

19.1.2. Поддерживаемые BBCode-теги……………………………………………………………………………….. 485

19.1.3. Обработка BBCode…………………………………………………………………………………………………… 486

19.1.3.1. Обработка BBCode при выводе…………………………………………………………………….. 486

19.1.3.2. Хранение BBCode в модели…………………………………………………………………………… 487

19.1.4. Создание дополнительных BBCode-тегов……………………………………………………………… 488

19.1.5. Создание графических смайликов…………………………………………………………………………… 490

19.1.6. Настройка django-precise-bbcode…………………………………………………………………………….. 490

19.2. Библиотека django-bootstrap5: интеграция с Bootstrap 5……………………………………………. 491

19.2.1. Установка django-bootstrap5……………………………………………………………………………………. 492

19.2.2. Использование django-bootstrap5……………………………………………………………………………. 492

19.2.3. Настройка django-bootstrap5…………………………………………………………………………………… 497

19.3. Написание своих фильтров и тегов……………………………………………………………………………….. 498

19.3.1. Организация исходного кода…………………………………………………………………………………… 499

19.3.2. Написание фильтров………………………………………………………………………………………………… 499

19.3.2.1. Написание и использование простейших фильтров……………………………………. 499

19.3.2.2. Управление заменой недопустимых символов HTML………………………………… 501

19.3.3. Написание тегов……………………………………………………………………………………………………….. 502

19.3.3.1. Написание тегов, выводящих элементарные значения……………………………….. 502

19.3.3.2. Написание шаблонных тегов…………………………………………………………………………. 504

19.3.4. Регистрация фильтров и тегов………………………………………………………………………………….. 505

19.4. Переопределение шаблонов………………………………………………………………………………………….. 506

Глава 20. Обработка выгруженных файлов…………………………………………. 509

20.1. Подготовка подсистемы обработки выгруженных файлов………………………………………… 509

20.1.1. Настройка подсистемы обработки выгруженных файлов……………………………………. 509

20.1.2. Указание маршрута для выгруженных файлов……………………………………………………… 511

20.2. Хранение файлов в моделях…………………………………………………………………………………………… 512

20.2.1. Типы полей модели, предназначенные для хранения файлов……………………………… 512

20.2.2. Поля форм, валидаторы и элементы управления, служащие для указания файлов 514

20.2.3. Обработка выгруженных файлов……………………………………………………………………………. 516

20.2.4. Вывод выгруженных файлов……………………………………………………………………………………. 518

20.2.5. Удаление выгруженного файла……………………………………………………………………………….. 519

20.3. Хранение путей к файлам в моделях…………………………………………………………………………….. 520

20.4. Низкоуровневые средства для сохранения выгруженных файлов…………………………….. 520

20.4.1. Класс UploadedFile: выгруженный файл. Сохранение выгруженных файлов……. 521

20.4.2. Вывод выгруженных файлов низкоуровневыми средствами………………………………… 522

20.5. Библиотека django-cleanup: автоматическое удаление ненужных файлов………………. 523

20.6. Библиотека easy-thumbnails: вывод миниатюр……………………………………………………………. 525

20.6.1. Установка easy-thumbnails………………………………………………………………………………………. 525

20.6.2. Настройка easy-thumbnails………………………………………………………………………………………. 526

20.6.2.1. Пресеты миниатюр………………………………………………………………………………………….. 526

20.6.2.2. Остальные настройки библиотеки………………………………………………………………… 528

20.6.3. Вывод миниатюр в шаблонах………………………………………………………………………………….. 530

20.6.4. Хранение миниатюр в моделях……………………………………………………………………………….. 531

20.6.5. Дополнительная команда thumbnail_cleanup………………………………………………………… 532

Глава 21. Разграничение доступа: расширенные инструменты……………. 534

21.1. Настройки проекта, касающиеся разграничения доступа…………………………………………. 534

21.2. Работа с пользователями……………………………………………………………………………………………….. 535

21.2.1. Создание пользователей………………………………………………………………………………………….. 535

21.2.2. Работа с паролями……………………………………………………………………………………………………. 535

21.3. Вход и выход…………………………………………………………………………………………………………………… 536

21.4. Валидация паролей………………………………………………………………………………………………………… 537

21.4.1. Стандартные валидаторы паролей………………………………………………………………………… 538

21.4.2. Написание своих валидаторов паролей…………………………………………………………………. 539

21.4.3. Выполнение валидации паролей…………………………………………………………………………….. 540

21.5. Обращение к модели пользователя……………………………………………………………………………….. 541

21.6. Создание своей модели пользователя…………………………………………………………………………… 542

21.7. Создание своих прав пользователя………………………………………………………………………………. 543

21.8. Асинхронные расширенные инструменты для разграничения доступа……………………. 544

Глава 22. Посредники и обработчики контекста………………………………….. 545

22.1. Посредники……………………………………………………………………………………………………………………… 545

22.1.1. Стандартные посредники………………………………………………………………………………………… 545

22.1.2. Порядок выполнения посредников………………………………………………………………………….. 547

22.1.3. Написание своих посредников………………………………………………………………………………… 547

22.1.3.1. Посредники-функции………………………………………………………………………………………. 548

22.1.3.2. Посредники-классы…………………………………………………………………………………………. 549

22.1.3.3. Асинхронные и универсальные посредники………………………………………………… 551

22.2. Обработчики контекста………………………………………………………………………………………………….. 554

Глава 23. Cookie, сессии, всплывающие сообщения
и подписывание данных………………………………………………………………………. 555

23.1. Cookie………………………………………………………………………………………………………………………………. 555

23.2. Сессии………………………………………………………………………………………………………………………………. 558

23.2.1. Настройка сессий……………………………………………………………………………………………………… 558

23.2.2. Использование сессий………………………………………………………………………………………………. 560

23.2.3. Сохранение сессий……………………………………………………………………………………………………. 562

23.2.4. Дополнительная команда clearsessions………………………………………………………………….. 562

23.2.5. Асинхронные инструменты для работы с сессиями………………………………………………. 563

23.3. Всплывающие сообщения……………………………………………………………………………………………… 563

23.3.1. Настройка всплывающих сообщений…………………………………………………………………….. 563

23.3.2. Уровни всплывающих сообщений…………………………………………………………………………… 564

23.3.3. Создание всплывающих сообщений……………………………………………………………………….. 564

23.3.4. Вывод всплывающих сообщений……………………………………………………………………………. 566

23.3.4.1. Задание минимального уровня выводимых всплывающих сообщений…….. 567

23.3.5. Объявление своих уровней всплывающих сообщений………………………………………….. 568

23.4. Подписывание данных…………………………………………………………………………………………………… 568

Глава 24. Сигналы……………………………………………………………………………….. 572

24.1. Обработка сигналов……………………………………………………………………………………………………….. 572

24.1.1. Объявление обработчиков сигналов……………………………………………………………………….. 572

24.1.2. Привязка обработчиков к сигналам: первый способ…………………………………………….. 573

24.1.3. Привязка обработчиков к сигналам: второй способ……………………………………………… 575

24.1.4. Отмена привязки обработчиков к сигналам…………………………………………………………… 575

24.2. Встроенные сигналы Django………………………………………………………………………………………….. 576

24.3. Объявление и отправка своих сигналов……………………………………………………………………….. 580

24.3.1. Асинхронные инструменты для отправки сигналов……………………………………………… 582

Глава 25. Поддержка нескольких веб-сайтов, простые веб-страницы и статичные перенаправления…………………………………………………………………………………………………………….. 583

25.1. Поддержка нескольких веб-сайтов……………………………………………………………………………….. 583

25.1.1. Подготовка подсистемы поддержки нескольких веб-сайтов к работе…………………. 583

25.1.2. Регистрация веб-сайтов в проекте…………………………………………………………………………… 584

25.1.3. Модель веб-сайта……………………………………………………………………………………………………… 584

25.1.4. Получение веб-сайта, к которому был выполнен запрос……………………………………… 585

25.1.5. Специфические случаи использования подсистемы поддержки
нескольких веб-сайтов………………………………………………………………………………………………………….. 586

25.2. Простые веб-страницы…………………………………………………………………………………………………… 587

25.2.1. Подготовка подсистемы простых веб-страниц………………………………………………………. 587

25.2.2. Создание простых веб-страниц……………………………………………………………………………….. 588

25.2.3. Вывод простых веб-страниц……………………………………………………………………………………. 588

25.2.3.1. Прямой вывод простых веб-страниц……………………………………………………………… 588

25.2.3.2. Использование встроенного списка маршрутов………………………………………….. 589

25.2.3.3. Написание отдельных маршрутов для конкретных простых веб-страниц.. 589

25.2.4. Шаблоны простых веб-страниц………………………………………………………………………………. 590

25.2.5. Вывод гиперссылок на простые веб-страницы………………………………………………………. 591

25.3. Статичные перенаправления…………………………………………………………………………………………. 592

25.3.1. Подготовка подсистемы статичных перенаправлений…………………………………………. 592

25.3.2. Создание статичных перенаправлений………………………………………………………………….. 592

25.3.3. Выполнение статичных перенаправлений…………………………………………………………….. 593

Глава 26. Отправка электронных писем………………………………………………. 594

26.1. Настройка подсистемы отправки электронных писем……………………………………………….. 594

26.2. Низкоуровневые инструменты для отправки писем……………………………………………………. 596

26.2.1. Класс EmailMessage: обычное электронное письмо……………………………………………… 596

26.2.2. Формирование писем на основе шаблонов…………………………………………………………….. 598

26.2.3. Использование соединений. Массовая рассылка писем……………………………………….. 598

26.2.4. Класс EmailMultiAlternatives: составное письмо…………………………………………………… 599

26.3. Высокоуровневые инструменты для отправки писем…………………………………………………. 600

26.3.1. Отправка писем по произвольным адресам……………………………………………………………. 600

26.3.2. Отправка писем зарегистрированным пользователям………………………………………….. 601

26.3.3. Отправка писем администраторам и редакторам сайта………………………………………. 602

26.4. Отправка тестового электронного письма……………………………………………………………………. 603

26.5. Использование отладочного SMTP-сервера aiosmtpd………………………………………………… 603

Глава 27. Кеширование………………………………………………………………………… 605

27.1. Кеширование на стороне сервера…………………………………………………………………………………. 605

27.1.1. Подготовка подсистемы кеширования на стороне сервера………………………………….. 605

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

27.1.1.2. Создание таблицы для хранения кеша…………………………………………………………. 610

27.1.2. Высокоуровневые средства кеширования……………………………………………………………… 611

27.1.2.1. Кеширование всего веб-сайта………………………………………………………………………… 611

27.1.2.2. Кеширование на уровне отдельных контроллеров……………………………………… 612

27.1.2.3. Управление кешированием…………………………………………………………………………….. 613

27.1.3. Низкоуровневые средства кеширования………………………………………………………………… 614

27.1.3.1. Кеширование фрагментов веб-страниц…………………………………………………………. 614

27.1.3.2. Кеширование произвольных значений…………………………………………………………. 616

27.1.3.3. Асинхронные инструменты для кеширования произвольных значений……. 619

27.2. Кеширование на стороне клиента…………………………………………………………………………………. 619

27.2.1. Автоматическая обработка заголовков………………………………………………………………….. 619

27.2.2. Управление кешированием в контроллерах…………………………………………………………… 621

27.2.2.1. Условная обработка запросов……………………………………………………………………….. 621

27.2.2.2. Прямое указание параметров кеширования…………………………………………………. 622

27.2.2.3. Запрет кеширования……………………………………………………………………………………….. 623

27.2.3. Управление кешированием в посредниках…………………………………………………………….. 623

Глава 28. Локализация…………………………………………………………………………. 625

28.1. Локализация строк………………………………………………………………………………………………………….. 625

28.1.1. Пометка локализуемых строк………………………………………………………………………………….. 625

28.1.1.1. Пометка локализуемых строк в коде шаблонов…………………………………………… 626

28.1.1.2. Пометка локализуемых строк в Python-коде………………………………………………… 629

28.1.2. Создание языковых модулей……………………………………………………………………………………. 631

28.1.2.1. Генерирование языковых модулей………………………………………………………………… 631

28.1.2.2. Перевод локализуемых строк………………………………………………………………………… 632

28.1.2.3. Компиляция языковых модулей…………………………………………………………………….. 635

28.1.3. Переключение веб-сайта на требуемый язык…………………………………………………………. 636

28.1.3.1. Автоматическое переключение на требуемый язык…………………………………….. 636

28.1.3.2. Вывод сведений о поддерживаемых языках…………………………………………………. 637

28.1.3.3. Создание языковых редакций веб-сайта………………………………………………………. 639

28.1.3.4. Переключение на требуемый язык без создания языковых редакций
веб-сайта…………………………………………………………………………………………………………………………. 640

28.1.4. Дополнительные инструменты для локализации строк………………………………………… 642

28.1.5. Настройка локализации строк………………………………………………………………………………… 643

28.2. Локализация форматов…………………………………………………………………………………………………… 645

28.3. Локализация временнх зон………………………………………………………………………………………….. 646

28.3.1. Реализация переключения веб-сайта на требуемую временнýю зону…………………. 646

28.3.2. Вывод значений времени и временнх отметок в разных временнх зонах………. 649

Глава 29. Административный веб-сайт Django…………………………………….. 651

29.1. Подготовка административного веб-сайта к работе…………………………………………………… 651

29.2. Регистрация моделей на административном веб-сайте………………………………………………. 652

29.3. Редакторы моделей…………………………………………………………………………………………………………. 653

29.3.1. Параметры списка записей………………………………………………………………………………………. 653

29.3.1.1. Параметры списка записей: состав выводимого списка……………………………… 653

29.3.1.2. Параметры списка записей: фильтрация и сортировка………………………………. 658

29.3.1.3. Параметры списка записей: прочие………………………………………………………………. 663

29.3.2. Параметры страниц добавления и правки записей……………………………………………….. 665

29.3.2.1. Параметры страниц добавления и правки записей: набор выводимых полей 665

29.3.2.2. Параметры страниц добавления и правки записей:
элементы управления…………………………………………………………………………………………………….. 668

29.3.2.3. Параметры страниц добавления и правки записей: прочие……………………….. 671

29.3.3. Регистрация редакторов на административном веб-сайте…………………………………… 672

29.4. Встроенные редакторы………………………………………………………………………………………………….. 673

29.4.1. Объявление встроенного редактора……………………………………………………………………….. 673

29.4.2. Параметры встроенного редактора………………………………………………………………………… 674

29.4.3. Регистрация встроенного редактора………………………………………………………………………. 676

29.5. Действия…………………………………………………………………………………………………………………………… 676

Глава 30. Разработка веб-служб REST. Библиотека Django REST framework…….. 679

30.1. Установка и подготовка к работе Django REST framework………………………………………… 680

30.2. Введение в Django REST framework. Вывод данных…………………………………………………… 682

30.2.1. Сериализаторы…………………………………………………………………………………………………………. 682

30.2.2. Веб-представление JSON………………………………………………………………………………………….. 683

30.2.3. Вывод данных на стороне клиента…………………………………………………………………………. 685

30.2.4. Первый принцип REST: идентификация ресурса по интернет-адресу………………… 686

30.3. Ввод и правка данных……………………………………………………………………………………………………. 688

30.3.1. Второй принцип REST: идентификация действия по HTTP-методу…………………….. 688

30.3.2. Парсеры веб-форм…………………………………………………………………………………………………….. 692

30.4. Контроллеры-классы Django REST framework……………………………………………………………. 693

30.4.1. Контроллер-класс низкого уровня………………………………………………………………………….. 693

30.4.2. Контроллеры-классы высокого уровня: комбинированные и простые……………….. 694

30.5. Метаконтроллеры…………………………………………………………………………………………………………… 696

30.6. Разграничение доступа в Django REST framework……………………………………………………… 697

30.6.1. Третий принцип REST: данные клиента хранятся на стороне клиента.
Основная аутентификация…………………………………………………………………………………………………… 697

30.6.2. Классы разграничения доступа………………………………………………………………………………. 698

30.6.3. Жетонная аутентификация. Библиотека Simple JWT…………………………………………….. 699

30.6.3.1. Подготовка Simple JWT к работе…………………………………………………………………… 700

30.6.3.2. Контроллеры Simple JWT и написание маршрутов…………………………………….. 701

30.6.3.3. Использование Simple JWT на стороне клиента…………………………………………… 703

30.6.3.4. Настройка Simple JWT……………………………………………………………………………………. 705

Глава 31. Средства журналирования и отладки……………………………………. 707

31.1. Средства журналирования Django……………………………………………………………………………….. 707

31.1.1. Настройка подсистемы журналирования………………………………………………………………. 707

31.1.2. Объект сообщения…………………………………………………………………………………………………….. 708

31.1.3. Форматировщики………………………………………………………………………………………………………. 709

31.1.4. Фильтры…………………………………………………………………………………………………………………….. 710

31.1.5. Обработчики……………………………………………………………………………………………………………… 712

31.1.6. Регистраторы…………………………………………………………………………………………………………….. 717

31.1.7. Пример настройки подсистемы журналирования…………………………………………………. 719

31.1.8. Предотвращение попадания персональных данных в отчеты об ошибках………… 721

31.2. Панель Django Debug Toolbar………………………………………………………………………………………… 722

31.2.1. Подготовка Django Debug Toolbar к работе……………………………………………………………. 722

31.2.2. Работа с Django Debug Toolbar………………………………………………………………………………… 723

31.3. Отправка электронных писем с сообщениями об отсутствующих веб-страницах…… 726

Глава 32. Публикация веб-сайта………………………………………………………….. 727

32.1. Подготовка веб-сайта к публикации…………………………………………………………………………….. 727

32.1.1. Написание шаблонов веб-страниц с сообщениями об ошибках………………………….. 727

32.1.2. Удаление ненужных данных……………………………………………………………………………………. 728

32.1.3. Настройка эксплуатационного режима…………………………………………………………………. 729

32.1.4. Настройка параметров безопасности…………………………………………………………………….. 730

32.1.5. Настройка веб-сайта для работы по протоколу HTTPS……………………………………….. 733

32.1.6. Настройка веб-сайта для работы через обратный прокси-сервер………………………. 735

32.1.7. Окончательная проверка веб-сайта………………………………………………………………………… 736

32.2. Публикация веб-сайта……………………………………………………………………………………………………. 737

32.2.1. Публикация посредством Uvicorn……………………………………………………………………………. 737

32.2.1.1. Подготовка веб-сайта к публикации посредством Uvicorn…………………………. 738

32.2.1.2. Запуск и остановка Uvicorn……………………………………………………………………………. 739

32.2.2. Публикация посредством Apache HTTP Server………………………………………………………. 739

32.2.2.1. Подготовка веб-сайта к публикации посредством Apache HTTP Server……. 740

32.2.2.2. Подготовка платформы для публикации посредством
Apache HTTP Server……………………………………………………………………………………………………….. 741

32.2.2.3. Конфигурирование веб-сайта для работы под Apache HTTP Server………….. 742

32.2.3. Другие варианты публикации…………………………………………………………………………………. 744

Часть IV. Практическое занятие: разработка веб-сайта.. 745

Глава 33. Дизайн. Вспомогательные веб-страницы………………………………. 746

33.1. План веб-сайта………………………………………………………………………………………………………………… 746

33.2. Подготовка проекта и приложения main………………………………………………………………………. 747

33.2.1. Создание и настройка проекта………………………………………………………………………………… 747

33.2.2. Создание и настройка приложения main………………………………………………………………… 748

33.3. Базовый шаблон……………………………………………………………………………………………………………… 748

33.4. Главная веб-страница…………………………………………………………………………………………………….. 755

33.5. Вспомогательные веб-страницы……………………………………………………………………………………. 757

Глава 34. Работа с посетителями и разграничение доступа………………….. 760

34.1. Модель пользователя……………………………………………………………………………………………………… 760

34.2. Основные веб-страницы: входа, профиля и выхода……………………………………………………. 761

34.2.1. Веб-страница входа………………………………………………………………………………………………….. 761

34.2.2. Веб-страница пользовательского профиля…………………………………………………………….. 764

34.2.3. Реализация выхода…………………………………………………………………………………………………… 765

34.3. Веб-страницы правки личных данных посетителя……………………………………………………… 766

34.3.1. Веб-страница правки основных сведений………………………………………………………………. 766

34.3.2. Веб-страница правки пароля…………………………………………………………………………………… 768

34.4. Веб-страницы регистрации и активации посетителей………………………………………………… 770

34.4.1. Веб-страницы регистрации нового посетителя……………………………………………………… 770

34.4.1.1. Форма для занесения сведений о новом посетителе……………………………………. 770

34.4.1.2. Средства для регистрации посетителя………………………………………………………….. 772

34.4.1.3. Средства для отправки писем с требованиями активации………………………….. 774

34.4.2. Веб-страницы активации посетителя……………………………………………………………………… 775

34.5. Веб-страница удаления посетителя……………………………………………………………………………… 778

34.6. Инструменты для администрирования посетителей…………………………………………………… 779

Глава 35. Рубрики………………………………………………………………………………… 782

35.1. Модели рубрик……………………………………………………………………………………………………………….. 782

35.1.1. Базовая модель рубрик…………………………………………………………………………………………….. 782

35.1.2. Модель надрубрик……………………………………………………………………………………………………. 783

35.1.3. Модель подрубрик……………………………………………………………………………………………………. 784

35.2. Инструменты для администрирования рубрик……………………………………………………………. 785

35.3. Вывод списка рубрик в вертикальной панели навигации…………………………………………… 786

Глава 36. Объявления………………………………………………………………………….. 789

36.1. Подготовка к обработке выгруженных файлов……………………………………………………………. 789

36.2. Модели объявлений и дополнительных иллюстраций……………………………………………….. 790

36.2.1. Модель самих объявлений……………………………………………………………………………………….. 790

36.2.2. Модель дополнительных иллюстраций…………………………………………………………………. 793

36.2.3. Реализация удаления объявлений в модели пользователя……………………………………. 793

36.3. Инструменты для администрирования объявлений…………………………………………………….. 794

36.4. Вывод объявлений………………………………………………………………………………………………………….. 794

36.4.1. Вывод списка объявлений………………………………………………………………………………………… 795

36.4.1.1. Форма поиска и контроллер списка объявлений…………………………………………. 795

36.4.1.2. Реализация корректного возврата…………………………………………………………………. 796

36.4.1.3. Шаблон веб-страницы списка объявлений…………………………………………………… 798

36.4.2. Веб-страница сведений о выбранном объявлении………………………………………………… 801

36.4.3. Вывод последних 10 объявлений на главной веб-странице…………………………………. 805

36.5. Работа с объявлениями…………………………………………………………………………………………………… 805

36.5.1. Вывод объявлений, оставленных текущим посетителем………………………………………. 805

36.5.2. Добавление, правка и удаление объявлений………………………………………………………….. 806

Глава 37. Комментарии………………………………………………………………………… 811

37.1. Подготовка к выводу CAPTCHA……………………………………………………………………………………. 811

37.2. Модель комментариев……………………………………………………………………………………………………. 812

37.3. Вывод и добавление комментариев………………………………………………………………………………. 813

37.4. Отправка уведомлений о новых комментариях…………………………………………………………… 816

Глава 38. Бэкенд REST…………………………………………………………………………. 818

38.1. Бэкенд………………………………………………………………………………………………………………………………. 818

38.1.1. Подготовка к разработке бэкенда…………………………………………………………………………… 818

38.1.2. Список объявлений…………………………………………………………………………………………………… 819

38.1.3. Сведения о выбранном объявлении………………………………………………………………………… 820

38.1.4. Вывод и добавление комментариев………………………………………………………………………… 821

38.2. Тестовый фронтенд…………………………………………………………………………………………………………. 823

38.2.1. Введение в Angular……………………………………………………………………………………………………. 823

38.2.2. Подготовка к разработке фронтенда………………………………………………………………………. 824

38.2.3. Ключевые файлы и модули Angular-проекта…………………………………………………………. 825

38.2.3.1. Стартовая веб-страница…………………………………………………………………………………. 825

38.2.3.2. Стартовый модуль………………………………………………………………………………………….. 826

38.2.3.3. Конфигурационный модуль…………………………………………………………………………… 826

38.2.4. Модуль списка маршрутов………………………………………………………………………………………. 828

38.2.5. Компонент приложения AppComponent………………………………………………………………….. 828

38.2.6. Компонент списка объявлений BbListComponent………………………………………………….. 830

38.2.7. Компонент сведений об объявлении BbDetailComponent……………………………………… 835

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

Приложение. Описание файлового архива, сопровождающего книгу….. 844

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

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

Новинка: “Проектирование информационных систем. Профессиональный подход”

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

Рассмотрены подходы и технологии, применяющиеся для проектирования информационных систем и подбора инструментов с учетом развития и поддержки программных продуктов. Разобрана теория развертывания, тестирования, автоматизации, балансировки нагрузки и поддержка новых возможностей в развивающемся продукте. Материал теоретической части рассмотрен на основе гипотетической информационной системы для сказочных персонажей. В практической части описанные теоретические концепции применяются в рамках реализации технического задания и в условиях ограниченности ресурсов. Среди рассмотренных примеров – разработка телеграм-бота, интернет-магазина и плагина к редактору для  3D-моделирования.

Для программистов,  бизнес-аналитиков, архитекторов IT-решений

Правильные вопросы – ключ к правильным ответам

Перед вами книга о проектировании информационных систем (system design), написанная программистом для программистов.
Проектирование программного обеспечения не сводится к выбору готовых технологий и подходов. Грамотно построенная архитектура упрощает дальнейшую поддержку программного продукта и удешевляет разработку нового функционала, как запланированного, так и неожиданно вклинившегося в требования по проекту.  В книге исследованы различные архитектурные подходы и их адаптивность к изменяющимся требованиям бизнеса в долгосрочной перспективе.

Книга состоит из двух частей: теоретической и практической.

  • Материал теоретической части рассмотрен на основе гипотетической информационный системы для сказочных персонажей.
  • В практической части описанные теоретические концепции применяются в рамках реализации технического задания и в условиях ограниченности ресурсов. Среди рассмотренных примеров — разработка телеграм-бота, интернет-магазина, редактора изображений и инструмента для 3D-моделирования.
  • Архитектурные принципы и шаблоны
  • Проектирование программных систем
  • Тестирование
  • Развёртывание
  • Автоматизация процессов
  • Балансировка нагрузки
  • Анализ изменяющихся требований

 

Нет фото

Туров Владимир – инженер-программист, более пяти лет занимающийся коммерческой бэкенд-разработкой, закончил Санкт-Петербургский государственный университет информационных технологий по программной инженерии, автор более 80 технических статей на Хабре, выходивших преимущественно в корпоративном блоге компании Selectel https://habr.com/ru/users/Firemoon/. Автор телеграм-канала https://t.me/not_only_msk о тонкостях программирования.

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

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

Часть I. Теория проектирования……………………………………………… 11

Глава 1. Методологии разработки ПО……………………………………………………. 13

Водопадная модель…………………………………………………………………………………………………………………… 13

Спиральная модель……………………………………………………………………………………………………………………. 15

Rational Unified Process……………………………………………………………………………………………………………… 16

Язык моделирования UML………………………………………………………………………………………………………… 18

Сущности UML…………………………………………………………………………………………………………………… 18

Структурные сущности UML…………………………………………………………………………………… 18

Поведенческие и дополнительные сущности UML……………………………………………….. 19

Комментирующие сущности UML………………………………………………………………………….. 19

Отношения UML…………………………………………………………………………………………………………………. 19

Диаграммы UML………………………………………………………………………………………………………………… 20

Диаграмма классов…………………………………………………………………………………………………… 20

Диаграмма состояний………………………………………………………………………………………………. 21

Диаграмма развертывания………………………………………………………………………………………. 21

Диаграмма прецедентов…………………………………………………………………………………………… 22

Диаграмма последовательности……………………………………………………………………………… 22

Гибкие методологии………………………………………………………………………………………………………………….. 23

Scrum…………………………………………………………………………………………………………………………………… 24

Feature-Driven Development……………………………………………………………………………………………….. 26

Глава 2. Выяснение требований…………………………………………………………….. 29

Функциональные требования…………………………………………………………………………………………………… 30

Нефункциональные требования……………………………………………………………………………………………….. 31

Глава 3. Архитектурные шаблоны и стили…………………………………………….. 33

Монолитная архитектура…………………………………………………………………………………………………………. 33

Микросервисная архитектура………………………………………………………………………………………………….. 34

Микроядерная архитектура……………………………………………………………………………………………………… 35

Событийно-ориентированная архитектура……………………………………………………………………………. 36

Многоуровневая архитектура………………………………………………………………………………………………….. 37

Representational State Transfer (REST)……………………………………………………………………………………… 38

Распределенная транзакция……………………………………………………………………………………………………… 39

Протокол двухфазного согласования (2 Phase Commit, 2PC)………………………………………… 40

Протокол трехфазного согласования (3 Phase Commit, 3PC)………………………………………… 41

Оркестрация……………………………………………………………………………………………………………………….. 41

Хореография……………………………………………………………………………………………………………………….. 42

Паттерн SAGA…………………………………………………………………………………………………………………….. 42

Глава 4. Принципы разработки ПО……………………………………………………….. 45

Принцип KISS…………………………………………………………………………………………………………………………….. 45

Принцип YAGNI…………………………………………………………………………………………………………………………. 47

Принцип SOLID………………………………………………………………………………………………………………………….. 47

S — Single Response Principle (принцип единой ответственности)………………………………….. 47

O — Open-Closed Principle (принцип открытости/закрытости)………………………………………. 48

L — Liskov substitution principle (принцип подстановки Барбары Лисков)…………………… 49

I — interface segregation principle (принцип разделения интерфейса)……………………………. 51

D — dependency inversion principle (принцип инверсии зависимостей)…………………………. 52

Инверсия управления………………………………………………………………………………………………………………… 53

Внедрение зависимостей…………………………………………………………………………………………………………… 54

Глава 5. Технологии………………………………………………………………………………. 57

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

Реляционная модель данных…………………………………………………………………………………………….. 58

Столбцово-ориентированная модель………………………………………………………………………………. 60

Документо-ориентированная модель………………………………………………………………………………. 60

Графовая модель………………………………………………………………………………………………………………… 61

Ключ-значение…………………………………………………………………………………………………………………… 61

Базы данных для временнх рядов………………………………………………………………………………….. 62

Брокер сообщений……………………………………………………………………………………………………………………… 62

Параллельные вычисления……………………………………………………………………………………………………….. 64

Закон Амдала……………………………………………………………………………………………………………………… 64

Многопоточность………………………………………………………………………………………………………………. 65

Синхронизация в многопоточных программах……………………………………………………… 65

Псевдопараллелизм…………………………………………………………………………………………………………… 66

Сопрограммы (корутины)………………………………………………………………………………………………….. 67

Многопроцессорные вычисления…………………………………………………………………………………….. 67

Межпроцессное взаимодействие…………………………………………………………………………….. 67

Распределенные вычисления…………………………………………………………………………………………….. 68

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

Вызов функций в распределенных системах………………………………………………………….. 70

GraphQL………………………………………………………………………………………………………………………………………. 70

WebSocket…………………………………………………………………………………………………………………………………… 71

Кеширование……………………………………………………………………………………………………………………………… 73

Кеширование при чтении (сквозное чтение, read-through)……………………………………………… 73

Кеширование при записи (сквозная запись, write-through)……………………………………………… 73

Чтение на стороне (Read aside)…………………………………………………………………………………………. 73

Запись на стороне (Write aside)…………………………………………………………………………………………. 75

Кеширование на опережение (Cache Ahead, Refresh Ahead)…………………………………………. 75

Политики инвалидации……………………………………………………………………………………………………… 76

Идентификация, аутентификация и авторизация……………………………………………………………………. 77

Идентификация…………………………………………………………………………………………………………………… 77

Аутентификация…………………………………………………………………………………………………………………. 77

Авторизация……………………………………………………………………………………………………………………….. 77

Глава 6. Тестирование……………………………………………………………………………. 79

Выбор данных для тестирования…………………………………………………………………………………………….. 81

Юнит-тестирование…………………………………………………………………………………………………………………… 83

Интеграционное тестирование…………………………………………………………………………………………………. 83

Сквозное тестирование (end-to-end)…………………………………………………………………………………………. 84

Полное тестирование………………………………………………………………………………………………………………… 84

Ручное тестирование…………………………………………………………………………………………………………………. 85

Заглушки…………………………………………………………………………………………………………………………………….. 86

Глава 7. Развертывание…………………………………………………………………………. 87

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

Непрерывная интеграция………………………………………………………………………………………………….. 88

Непрерывная доставка………………………………………………………………………………………………………. 88

Непрерывное развертывание……………………………………………………………………………………………. 89

Масштабирование…………………………………………………………………………………………………………………….. 91

Вертикальное масштабирование……………………………………………………………………………………… 91

Горизонтальное масштабирование………………………………………………………………………………….. 92

Выделенные и облачные серверы……………………………………………………………………………………………. 92

Выделенный сервер……………………………………………………………………………………………………………. 93

Облачный сервер……………………………………………………………………………………………………………….. 93

DBaaS (Database as a Service)………………………………………………………………………………….. 94

Объектное хранилище………………………………………………………………………………………………. 94

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

Технология chroot………………………………………………………………………………………………………………. 96

Технология Jail……………………………………………………………………………………………………………………. 96

Технология Docker……………………………………………………………………………………………………………… 97

Технология Kubernetes………………………………………………………………………………………………………. 99

Технология Nomad…………………………………………………………………………………………………………… 100

Развертывание: обнаружение сервисов…………………………………………………………………………………. 101

Глава 8. Балансировка нагрузки………………………………………………………….. 103

Алгоритмы балансировки……………………………………………………………………………………………………….. 103

DNS                                                                                                                                                                 105

GeoDNS……………………………………………………………………………………………………………………………………… 106

Обратный прокси-сервер………………………………………………………………………………………………………… 107

Глава 9. Обслуживание………………………………………………………………………… 109

Логирование…………………………………………………………………………………………………………………………….. 109

Мониторинг……………………………………………………………………………………………………………………………… 111

Оповещение………………………………………………………………………………………………………………………………. 111

Анализаторы исходного кода………………………………………………………………………………………………… 112

Сканеры уязвимостей………………………………………………………………………………………………………………. 113

Аудит-логи……………………………………………………………………………………………………………………………….. 113

Аварийные игры………………………………………………………………………………………………………………………. 114

Миграция схемы и миграция данных…………………………………………………………………………………….. 115

Версионирование…………………………………………………………………………………………………………………….. 116

Глава 10. Отказоустойчивость, резервирование и надежность……………… 119

Надежность системы……………………………………………………………………………………………………………….. 119

Отказоустойчивость………………………………………………………………………………………………………………… 120

Резервирование………………………………………………………………………………………………………………………… 120

Резервное копирование……………………………………………………………………………………………………. 121

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

Восстановление после катастроф………………………………………………………………………………………….. 122

Часть II. Примеры проектирования систем……………………….. 125

Глава 11. Проектирование неинтеративного редактора изображений….. 127

Исходные требования……………………………………………………………………………………………………………… 127

Монолитный подход……………………………………………………………………………………………………………….. 127

Модульный подход…………………………………………………………………………………………………………………. 130

Внезапное требование…………………………………………………………………………………………………………….. 134

Рекомендуемые технологии……………………………………………………………………………………………………. 138

Распространение……………………………………………………………………………………………………………………… 138

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

Глава 12. Проектирование текстового блога………………………………………… 141

Исходные требования……………………………………………………………………………………………………………… 141

Быстрый минимальный вариант…………………………………………………………………………………………….. 142

Проектирование архитектуры………………………………………………………………………………………………… 145

Рекомендуемые технологии……………………………………………………………………………………………………. 150

Безопасность……………………………………………………………………………………………………………………………. 151

Аутентификация………………………………………………………………………………………………………………………. 152

Поиск…………………………………………………………………………………………………………………………………………. 152

Масштабирование…………………………………………………………………………………………………………………… 153

Локализация контента…………………………………………………………………………………………………………….. 153

Логирование и мониторинг…………………………………………………………………………………………………….. 155

Отслеживание популярности материалов…………………………………………………………………………….. 155

Рекомендательная система……………………………………………………………………………………………………… 156

Соблюдение локальных норм………………………………………………………………………………………………… 156

Резервное копирование……………………………………………………………………………………………………………. 156

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

Глава 13. Проектирование сервиса конвертации файлов……………………… 159

Исходные требования……………………………………………………………………………………………………………… 159

Проектирование архитектуры………………………………………………………………………………………………… 159

Проектирование веб-сервера………………………………………………………………………………………………….. 163

Проектирование агента…………………………………………………………………………………………………………… 164

Проектирование взаимодействия с инструментами конвертации………………………………………. 165

Проектирование фонового процесса……………………………………………………………………………………… 166

Выбор технологий…………………………………………………………………………………………………………………… 167

Ограничение анонимных пользователей………………………………………………………………………………. 167

Запрет использования сервиса в качестве файлового хранилища……………………………… 167

Ограничение количества действий с одного адреса…………………………………………………….. 168

Запрет регистрации с фальшивых почтовых адресов………………………………………………….. 169

Ограничение по объему и форматам……………………………………………………………………………… 169

Безопасность……………………………………………………………………………………………………………………………. 170

Взаимодействие с платежными системами…………………………………………………………………………… 171

Приватность данных……………………………………………………………………………………………………………….. 171

Пароль доступа………………………………………………………………………………………………………………… 171

Шифрование данных……………………………………………………………………………………………………….. 171

Логирование и мониторинг…………………………………………………………………………………………………….. 173

Распределенная архитектура…………………………………………………………………………………………………. 174

Улучшение пользовательского опыта…………………………………………………………………………………… 175

Подробные статусы…………………………………………………………………………………………………………. 175

Хеширование входных файлов……………………………………………………………………………………….. 176

Определение некорректных файлов……………………………………………………………………………….. 177

Добавление новой функциональности…………………………………………………………………………………… 177

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

Глава 14. Проектирование интернет-магазина в Telegram……………………. 179

Исходные требования……………………………………………………………………………………………………………… 179

Анализ возможностей………………………………………………………………………………………………………. 180

Ограничения……………………………………………………………………………………………………………………… 182

Проектирование интерфейса бота…………………………………………………………………………………………. 183

Проектирование зоны администратора………………………………………………………………………………… 186

Проектирование архитектуры………………………………………………………………………………………………… 188

Выбор технологий…………………………………………………………………………………………………………………… 190

Рассылка уведомлений……………………………………………………………………………………………………………. 190

Горизонтальное масштабирование……………………………………………………………………………………….. 192

Мониторинг……………………………………………………………………………………………………………………………… 193

Дальнейшие улучшения………………………………………………………………………………………………………….. 193

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

Глава 15. Проектирование плагина для отправки проекта
из программы 3D-моделирования…………………………………………………………. 195

Исходные требования……………………………………………………………………………………………………………… 195

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

Проектирование простой архитектуры…………………………………………………………………………………. 196

Проектирование составной архитектуры……………………………………………………………………………… 198

Выбор технологий…………………………………………………………………………………………………………………… 199

Логирование…………………………………………………………………………………………………………………………….. 199

Потенциальные технические улучшения………………………………………………………………………………. 200

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

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

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

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

Программируем на Java: практический подход к созданию надежных и эффективных приложений

Программируем на Java: практический подход к созданию надежных и эффективных приложений

Книга о современном программировании на Java, охватывающая новые возможности Java 21 и практическое применение языка для создания многофункциональных приложений. Подробно рассматриваются ключевые концепции, структуры данных, работа с реляционными базами данных PostgreSQL и Apache Cassandra®, а также использование фреймворков  Spring Boot и Spring Data. Отдельное внимание уделено разработке графики, анимации и даже небольших аркадных игр на Java. Рассматриваются лучшие практики построения программной архитектуры, создания графических интерфейсов и веб-приложений с помощью Vaadin.
Для программистов

Практическое руководство по программированию на Java 21

Эта книга — практическое руководство по одному из самых распространенных в мире языков программирования Java 21. Она поможет читателям расширить свои знания об общих конструкциях Java, структурах данных и инженерных подходах. Автор рассказывает об  использовании популярных Java-фреймворков, таких как Spring и Vaadin, для создания мощных, многофункциональных приложений. Также описана технология разработки приложений, управляемых СУБД корпоративного уровня, таких как PostgreSQL и Apache Cassandra®. Автор показывает, как использовать Java для анимации и создать простую аркадную игру.

  • Освойте фундаментальные структуры программирования на Java
  • Изучите возможности Java 21
  • Создавайте Java-приложения с использованием СУБД PostgreSQL и Apache Cassandra®
  • Узнайте, как создавать графику и простую анимацию с помощью Java
  • Используйте такие фреймворки, как Spring Boot и Spring Data
  • Разрабатывайте полнофункциональные графические интерфейсы с помощью Vaadin

 

Плоетц Аарон

Плоетц Аарон (Ploetz Aaron) — занимает должность developer advocate в компании DataStax. С 1997 года профессионально занимается разработкой программного обеспечения и имеет успешный опыт руководства командами администраторов баз данных и DevOps как в стартапах, так и в компаниях из списка Fortune 500.

Книгу “Программируем на Java: практический подход к созданию надежных и эффективных приложений” можно купить в нашем интенет-магазине.

Об авторе. 14

О рецензенте. 15

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

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

Пакет кодов и цветные изображения. 19

Глава 1. Знакомство с Java. 21

Введение. 21

Структура. 21

Цели  21

Почему стоит программировать на Java?. 22

Настройка среды.. 22

Операционная система. 23

Java Runtime Environment 23

Java Development Kit 23

Поставщики и редакции JDK.. 23

Установка. 24

Windows. 24

MacOS. 25

Linux. 25

Управление версиями. 25

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

Управление зависимостями в Java. 26

Система контроля версий. 26

Установка Git 27

Объектно-ориентированное программирование. 27

Инкапсуляция. 28

Наследование. 29

Абстракция. 30

Полиморфизм.. 32

Статический полиморфизм.. 32

Динамический полиморфизм.. 33

Преимущества ООП.. 34

Что нового в Java 21?. 34

Виртуальные потоки. 34

Упорядоченные коллекции. 35

Строковые шаблоны.. 36

Заключение. 37

Важно помнить. 37

Глава 2. Фундаментальные структуры программирования. 39

Введение. 39

Структура. 39

Цели  40

Начало работы.. 40

Maven. 40

HelloWorld. 40

Анонимные классы main. 42

Переменные и форматирование. 43

Чтение входных данных. 46

Обработка ошибок. 47

Операторы if 49

Операторы switch/case. 50

Циклы.. 52

Циклы for. 52

Циклы while. 53

Циклы do. 54

Файлы.. 55

Запись в файл. 55

Чтение из файла. 58

Чтение данных строки из файла. 59

Методы и конструкторы.. 62

Пример программы MetricUnitConverter. 62

Класс InvalidUOMException. 63

MeasurementValue POJO.. 63

Заключение. 72

Важно помнить. 73

Глава 3. Строки, символы и регулярные выражения. 75

Введение. 75

Структура. 75

Цели  75

Символы.. 75

ASCII-арт. 79

Строки. 81

indexOf 82

substring. 82

toUpperCase. 83

toLowerCase. 83

Сравнение строк. 84

Сравнение строковых суффиксов. 85

Сравнение префиксов строк. 87

contains. 87

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

Заключение. 92

Важно помнить. 92

Глава 4. Массивы, коллекции и записи. 93

Введение. 93

Структура. 93

Цели  93

Массивы.. 94

Многомерные массивы.. 96

Коллекции и словари. 100

Множества. 101

HashSet 102

LinkedHashSet 103

TreeSet 103

Списки. 103

ArrayList 104

LinkedList 106

Словари. 108

HashMap. 110

LinkedHashMap. 111

TreeMap. 112

Упорядоченные коллекции. 113

Записи. 114

Построение простого примера. 115

Класс RPGSimulation. 116

Класс Player. 118

Класс Hero. 120

Продолжение работы с классом RPGSimulation. 121

Заключение. 125

Важно помнить. 125

Глава 5. Арифметические операции. 127

Введение. 127

Структура. 127

Цели  127

Целочисленная арифметика. 128

Сложение. 128

Тестирование add( ) с помощью JUnit 130

Вычитание. 133

Умножение. 134

Деление. 134

Модуль. 135

Возведение в степень. 136

Арифметика чисел с плавающей точкой. 137

Сложение. 137

Особенности работы с арифметикой чисел с плавающей точкой. 138

Вычитание. 141

Умножение. 142

Деление. 142

Форматирование значений с плавающей точкой. 142

Возведение в степень. 144

Квадратный корень. 145

Кубический корень. 145

Модуль числа. 146

Заключение. 146

Важно помнить. 147

Глава 6. Общие структуры данных. 149

Введение. 149

Структура. 149

Цели  149

Стеки. 150

Очереди. 157

Связные списки. 161

Двоичные деревья. 168

Заключение. 173

Важно помнить. 173

Глава 7. Работа с базами данных. 175

Введение. 175

Структура. 175

Цели  175

Введение в базы данных. 176

Краткая история баз данных. 176

Теорема CAP. 178

Согласованность. 178

Доступность. 178

Устойчивость к разделениям.. 178

Обозначения CAP. 179

PostgreSQL. 180

ElephantSQL. 180

Схема. 182

Нормализация. 185

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

Запрос данных. 187

Доступ из Java. 189

Класс PostgresConn. 189

Класс AstronautPostgresDAL. 191

Класс GeminiAstronautsRDBMS. 193

Пересмотр класса AstronautPostgresDAL. 196

Пересмотр класса GeminiAstronautsRDBMS. 198

Apache Cassandra. 199

Astra DB.. 200

Схема. 203

Денормализация. 206

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

Запрос данных. 207

Доступ из Java. 209

pom.xml 209

Класс CassandraConn. 210

Класс AstronautCassandraDAL. 211

Класс GeminiAstronautsNoSQL. 213

Пересмотр класса AstronautCassandraDAL. 217

Пересмотр класса GeminiAstronautsNoSQL. 217

Выбор подходящей базы данных. 219

Заключение. 219

Важно помнить. 220

Глава 8. Веб-приложения. 221

Введение. 221

Структура. 221

Цели  221

Операции Restful 222

URI Restful 223

Простые операции. 223

Веб-сервисы с помощью Spring Boot 226

MVC.. 230

Контроллер погодного приложения. 230

Конечная точка сервиса Hello World. 231

Модель погодного приложения. 233

Определение нового пространства ключей. 233

Определение новой таблицы.. 234

Генерация нового маркера. 235

Установка свойств приложения и переменных окружения. 236

Изменение pom.xml 237

Класс WeatherPrimaryKey. 237

Класс WeatherEntity. 239

Класс WeatherReading. 240

Интерфейс WeatherAppRepository. 241

Построение JSON-объектов ответа. 242

Класс Measurement 242

Класс CloudLayer. 242

Класс Properties. 243

Класс Geometry. 244

Класс LatestWeather. 244

Пересмотр контроллера погодного приложения. 245

Создание пользовательских веб-интерфейсов. 250

Пересмотр pom.xml 250

Вид погодного приложения. 251

Заключение. 258

Важно помнить. 259

Глава 9. Графика в Java. 261

Введение. 261

Структура. 261

Цели  261

Простая графика с помощью AWT и Swing. 262

Класс SimpleDraw.. 262

Класс MyPanel 262

Анимация. 268

Класс Planet 268

Класс SolarSystem.. 270

Класс DrawPlanets. 273

Java Breakout 275

pom.xml 275

Класс Ball 276

Класс Brick. 278

Класс Paddle. 279

Класс KeyHandler. 280

Класс BreakoutPanel 282

Класс BreakoutGame. 291

Заключение. 293

Важно помнить. 293

Глава 10. Завершающий Java-проект. 295

Введение. 295

Структура. 295

Цели  295

Знакомство с приложением для работы с фильмами. 296

Архитектура. 296

База данных. 296

Выбор базы данных. 297

Создание новой векторной базы данных. 297

Проектирование таблиц. 298

Загрузчик данных. 300

pom.xml 301

Класс CassandraConnection. 301

Класс AstraConnection. 303

Класс Movie. 304

Класс MovieDataLoader. 305

Запрос данных. 313

Создание проекта киноприложения. 315

Каталог изображений. 316

pom.xml 316

application.yml 317

Модель. 318

Класс Movie. 318

Интерфейс MovieRepository. 319

Класс MovieByTitle. 320

Интерфейс MovieByTitleRepository. 321

Контроллер. 321

Класс MovieAppController. 321

Запрос к сервису. 324

Фильмы по ID.. 324

Фильмы по названию.. 324

Рекомендации фильмов. 325

Представление. 325

Класс MovieAppMainView.. 325

Заключение. 340

Важно помнить. 341

Приложения. 343

Приложение 1. Ссылки. 345

Приложение 2. Таблица преобразования UTF. 347

Приложение 3. Справочник команд баз данных. 356

SELECT. 356

INSERT. 357

UPDATE. 357

DELETE. 357

CREATE TABLE. 358

CREATE INDEX. 358

Приложение 4. Общие коды ответов HTTP. 359

Приложение 5. Основные цветовые коды.. 360

Приложение 6. Сбор мусора. 361

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

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

API как искусство: разработка, поддержка, интеграция

API как искусство: разработка, поддержка, интеграция

В книге подробно рассказано, как написать качественный API и интегрировать его в имеющуюся систему.  Рассмотрено, как готовить спецификации API, работать с запросами, обслуживать мобильные и серверные API для взаимодействия с базами данных и обмена сообщениями, реализовывать нетривиальную бизнес-логику и подбирать подходящую схему API даже для самых сложных и нечетких задач. Описано, как обеспечивать слабую связность между компонентами, организовывать операции CRUD, осуществлять синхронный и асинхронный обмен данными, в частности, выполнять операции push и poll. Рассказано, как реализовать аутентификацию и идентификацию пользователей. Весь материал базируется на парадигме HTTP REST и позволяет развивать ее в соответствии с современными реалиями и меняющимися требованиями.

Для специалистов по проектированию и поддержке API

API в современных приложениях подобны стыковочным узлам и разъемам. Подход «API-first» — одна из самых горячих современных тем в разработке программного обеспечения.
Многие компании постепенно приходят к пониманию, что уровень API (интерфейсов прикладного программирования) может многократно умножить возможности компании, если спроектировать его правильно. Однако некачественные или неудобные в поддержке API могут превратиться в источник хронических проблем, так что лучше сразу делать их правильно и предусматривать поддержку и расширяемость.

Эта книга написана с целью изложения лучших практик разработки API. Книга состоит из шести разделов, посвящённых:

  • проектированию API;
  • паттернам дизайна API;
  • поддержке обратной совместимости;
  • HTTP API и архитектурным принципам REST;
  • SDK и библиотекам для пользовательского интерфейса (UI);
  • управлению API как продуктом.

С книгой вы научитесь:

  • проектировать интерфейсы и писать их спецификации;
  • организовывать синхронный и асинхронный обмен данными
  • реализовывать модели push и poll
  • обеспечивать слабую связность между компонентами
  • выполнять операции CRUD
  • программировать бизнес-логику API
  • гарантировать надёжную идентификацию и аутентификацию пользователей.

 

Константинов Сергей Сергеевич

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

Книгу “API как искусство: разработка, поддержка, интеграция” можно купить в нашем интенет-магазине.

Введение………………………………………………………………………………………………….. 9

О структуре этой книги……………………………………………………………………………………………………………….. 9

Определение API………………………………………………………………………………………………………………………… 10

Критерии качества API……………………………………………………………………………………………………………… 11

Выбор подхода к разработке API…………………………………………………………………………………………….. 13

Подход API-first………………………………………………………………………………………………………………………….. 13

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

О версионировании……………………………………………………………………………………………………………………. 15

Условные обозначения и терминология………………………………………………………………………………….. 15

Часть I. Проектирование API………………………………………………………. 19

Глава 1. Пирамида контекстов API. Определение области применения…. 21

Почему API?……………………………………………………………………………………………………………………………….. 23

Что и как?……………………………………………………………………………………………………………………………………. 23

Глава 2. Разделение уровней абстракции……………………………………………….. 24

Изоляция уровней абстракции………………………………………………………………………………………………….. 34

Потоки данных…………………………………………………………………………………………………………………………… 36

Глава 3. Разграничение областей ответственности…………………………………. 38

Сценарии использования………………………………………………………………………………………………………….. 39

Хелперы………………………………………………………………………………………………………………………………………. 42

Обработка ошибок…………………………………………………………………………………………………………………….. 43

Декомпозиция интерфейсов. Правило «7±2»…………………………………………………………………………… 44

Глава 4. Описание конечных интерфейсов…………………………………………….. 47

  1. Важное уточнение номер один: правила не должны применяться бездумно………………….. 47
  2. Явное лучше неявного…………………………………………………………………………………………………………… 48
  3. Указывайте использованные стандарты……………………………………………………………………………… 49
  4. Сущности должны именоваться конкретно…………………………………………………………………………. 50
  5. Не экономьте буквы……………………………………………………………………………………………………………….. 50
  6. Тип поля должен быть ясен из его названия………………………………………………………………………… 51
  7. Подобные сущности должны называться подобно и вести себя подобным образом……… 52
  8. Избегайте двойных отрицаний……………………………………………………………………………………………… 53
  9. Избегайте неявного приведения типов…………………………………………………………………………………. 53
  10. Декларируйте технические ограничения явно………………………………………………………………….. 55
  11. Любые запросы должны быть лимитированы………………………………………………………………….. 55
  12. Описывайте политику перезапросов………………………………………………………………………………….. 56
  13. Подсчитывайте трафик……………………………………………………………………………………………………….. 56
  14. Отсутствие результата — тоже результат………………………………………………………………………… 57
  15. Валидируйте ввод………………………………………………………………………………………………………………… 58
  16. Значения по умолчанию должны быть осмысленны……………………………………………………….. 60
  17. Ошибки должны быть информативными…………………………………………………………………………… 61
  18. Всегда показывайте неразрешимые ошибки прежде разрешимых…………………………………. 62
  19. Начинайте исправление ошибок с более глобальных……………………………………………………… 63
  20. Проанализируйте потенциальные взаимные блокировки……………………………………………….. 64
  21. Указывайте время жизни ресурсов и политики кеширования………………………………………….. 65
  22. Сохраняйте точность дробных чисел………………………………………………………………………………… 66
  23. Все операции должны быть идемпотентны………………………………………………………………………. 67
  24. Не изобретайте безопасность…………………………………………………………………………………………….. 69
  25. Помогайте партнерам не изобретать безопасность…………………………………………………………. 70
  26. Используйте глобально уникальные идентификаторы……………………………………………………. 71
  27. Предусмотрите ограничения доступа……………………………………………………………………………….. 72
  28. Не предоставляйте функциональность массового получения
    чувствительных данных………………………………………………………………………………………………………. 72
  29. Локализация и интернационализация……………………………………………………………………………….. 73

Часть II. Паттерны дизайна API…………………………………………………. 75

Глава 5. О паттернах проектирования в контексте API…………………………. 77

Принципы решения типовых проблем проектирования API………………………………………………….. 78

Глава 6. Аутентификация партнеров и авторизация вызовов API………….. 79

Глава 7. Стратегии синхронизации………………………………………………………… 81

Программные блокировки…………………………………………………………………………………………………………. 82

Оптимистичное управление параллелизмом………………………………………………………………………….. 83

Глава 8. Слабая консистентность…………………………………………………………… 84

Событийная консистентность…………………………………………………………………………………………………… 84

Риски перехода к событийной консистентности…………………………………………………………………….. 86

Глава 9. Асинхронность и управление временем……………………………………. 89

Глава 10. Списки и организация доступа к ним…………………………………….. 93

Иммутабельные списки……………………………………………………………………………………………………………… 97

Пополняемые списки, иммутабельные данные……………………………………………………………………….. 97

Общий сценарий………………………………………………………………………………………………………………………. 101

Глава 11. Двунаправленные потоки данных. Push- и poll-модели…………. 103

Доставка сообщений на клиентское устройство………………………………………………………………….. 104

  1. Дуплексные соединения………………………………………………………………………………………………. 104
  2. Раздельный канал обратного вызова и асинхронные потоки событий………………….. 105
  3. Сторонние сервисы отправки push-уведомлений……………………………………………………… 105

Использование push-технологий в публичном API………………………………………………………………. 106

Доставка сообщений backend-to-backend…………………………………………………………………………….. 107

Типичные проблемы интеграции через webhook………………………………………………………………….. 108

Очереди сообщений…………………………………………………………………………………………………………………. 110

Глава 12. Асинхронная обработка событий.
Атомарность массовых изменений……………………………………………………….. 111

Глава 13. Частичные обновления…………………………………………………………. 119

Варианты решения………………………………………………………………………………………………………………….. 120

Разрешение конфликтов совместного редактирования………………………………………………………… 124

Глава 14. Деградация и предсказуемость……………………………………………… 125

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

Глава 15. Постановка проблемы обратной совместимости…………………… 129

Фрагментация клиентских приложений………………………………………………………………………………… 130

Эволюция предметной области……………………………………………………………………………………………… 132

Дрифт платформ………………………………………………………………………………………………………………………. 132

Обратная совместимость на уровне спецификаций……………………………………………………………… 133

Политика обратной совместимости……………………………………………………………………………………….. 134

Глава 16. О ватерлинии айсберга…………………………………………………………. 136

  1. Предоставляйте минимальный объем функциональности………………………………………………. 136
  2. Избегайте «серых зон» и недосказанности………………………………………………………………………… 137
  3. Фиксируйте неявные договоренности………………………………………………………………………………… 137
  4. Продуктовая логика тоже должна быть обратно совместимой………………………………………. 140

Глава 17. Расширение через абстрагирование………………………………………. 141

Границы применимости………………………………………………………………………………………………………….. 144

Глава 18. Сильная связность и сопутствующие проблемы…………………… 145

Правило контекстов…………………………………………………………………………………………………………………. 147

Глава 19. Слабая связность………………………………………………………………….. 151

Инверсия ответственности………………………………………………………………………………………………………. 156

Делегируй!………………………………………………………………………………………………………………………… 158

Интерфейсы как универсальный паттерн……………………………………………………………………………… 159

Глава 20. «Блокнот душевного покоя»…………………………………………………. 161

  1. Помните о подводной части айсберга……………………………………………………………………………….. 161
  2. Тестируйте формальные интерфейсы………………………………………………………………………………… 161
  3. Изолируйте зависимости…………………………………………………………………………………………………….. 162
  4. Реализуйте функциональность своего API поверх публичных интерфейсов…………………. 162
  5. Заведите блокнот…………………………………………………………………………………………………………………. 163

Часть IV. HTTP API и архитектурные принципы REST……….. 165

Глава 21. О концепции HTTP API. Парадигмы разработки
клиент-серверного взаимодействия………………………………………………………. 167

Глава 22. Преимущества и недостатки HTTP (REST) API в сравнении с альтернативными технологиями……………………………………………………………………………………….. 171

  1. Машиночитаемость метаданных……………………………………………………………………………………….. 173
  2. Качество решений……………………………………………………………………………………………………………….. 174
  3. Вопросы производительности……………………………………………………………………………………………. 175

Преимущества и недостатки формата JSON…………………………………………………………………………. 176

Выбор технологии разработки клиент-серверного API……………………………………………………….. 177

Технология gRPC……………………………………………………………………………………………………………… 178

Технология GraphQL……………………………………………………………………………………………………….. 178

Мифология REST……………………………………………………………………………………………………………………… 179

Глава 23. Составляющие HTTP-запросов и их семантика……………………. 182

  1. URL……………………………………………………………………………………………………………………………………….. 183
  2. Заголовки……………………………………………………………………………………………………………………………… 185
  3. HTTP-глаголы………………………………………………………………………………………………………………………. 186
  4. Статус-коды…………………………………………………………………………………………………………………………. 188

Важное замечание о кешировании………………………………………………………………………………………… 189

Важное замечание о консистентности…………………………………………………………………………………… 189

Глава 24. Организация HTTP API согласно принципам REST……………… 191

Пример построения HTTP API………………………………………………………………………………………………… 192

Авторизация stateless-запросов………………………………………………………………………………………………. 199

Глава 25. Разработка номенклатуры URL-ресурсов. CRUD-операции….. 200

  1. Где заканчиваются метаданные операции и начинаются «просто» данные
    и насколько допустимо дублировать поля и там и там?………………………………………………….. 201
  2. Каким образом организовывать эндпойнты, связывающие две сущности, междукоторыми нет явных отношений подчинения?………………………………………………………………………………………………………………………….. 202
  3. Насколько строго должна выдерживаться буквальная интерпретация
    конструкции ГЛАГОЛ /ресурс?……………………………………………………………………………………………. 202

CRUD-операции……………………………………………………………………………………………………………………….. 204

  1. Создание……………………………………………………………………………………………………………………….. 205
  2. Чтение……………………………………………………………………………………………………………………………. 206
  3. Редактирование……………………………………………………………………………………………………………. 207
  4. Удаление……………………………………………………………………………………………………………………….. 207

CRUD-операции в реальной жизни………………………………………………………………………………… 207

Глава 26. Работа с ошибками в HTTP API……………………………………………. 209

Клиентские ошибки…………………………………………………………………………………………………………………. 210

Серверные ошибки…………………………………………………………………………………………………………………… 213

Организация системы ошибок в HTTP API на практике………………………………………………………. 215

Глава 27. Заключительные положения и общие рекомендации……………. 215

Часть V. SDK- и UI-библиотеки………………………………………………….. 219

Глава 28. Терминология. Обзор технологий разработки SDK……………….. 221

Выбор фреймворка для разработки UI-компонентов…………………………………………………………… 222

Глава 29. SDK: проблемы и решения……………………………………………………. 223

Кодогенерация…………………………………………………………………………………………………………………………. 228

Другие инструменты……………………………………………………………………………………………………………….. 229

Глава 30. Проблемы встраивания UI-компонентов………………………………. 229

Проблемы…………………………………………………………………………………………………………………………………. 230

  1. Объединение в одном объекте разнородной функциональности…………………………….. 231
  2. Общее владение ресурсами…………………………………………………………………………………………. 231
  3. Множественная иерархия подчинения сущностей…………………………………………………… 232

Глава 31. Декомпозиция UI-компонентов…………………………………………….. 234

Глава 32. MV*-фреймворки………………………………………………………………….. 247

Паттерн «модель»…………………………………………………………………………………………………………………….. 249

Backend-Driven UI……………………………………………………………………………………………………………………. 251

Глава 33. Разделяемые ресурсы и асинхронные блокировки……………….. 254

Глава 34. Вычисляемые свойства…………………………………………………………. 258

Варианты подходов………………………………………………………………………………………………………………… 259

Вычисленные значения…………………………………………………………………………………………………………… 260

Глава 35. Заключение к части V………………………………………………………….. 260

Часть VI. API как продукт…………………………………………………………… 261

Глава 36. Продукт API. Бизнес-модели API………………………………………….. 263

Основные модели монетизации API……………………………………………………………………………………….. 265

  1. Разработчик = конечный пользователь……………………………………………………………………… 265
  2. API = основной и/или единственный способ доступа к сервису……………………………… 266
  3. API = партнерская программа…………………………………………………………………………………….. 266
  4. API = дополнительный доступ к сервису…………………………………………………………………… 267
  5. API = площадка для рекламы……………………………………………………………………………………… 268
  6. API = самореклама и самопиар…………………………………………………………………………………… 268
  7. API = инструмент получения обратной связи и UGC………………………………………………… 269
  8. Терраформирование…………………………………………………………………………………………………….. 269
  9. «Серая зона»…………………………………………………………………………………………………………………. 270

Подход API-first……………………………………………………………………………………………………………………….. 270

Глава 37. Формирование продуктового вдения………………………………….. 271

Продуктовое вдение API……………………………………………………………………………………………………….. 271

Проверка продуктовых гипотез……………………………………………………………………………………………… 272

Глава 38. Взаимодействие с разработчиками и бизнес-аудиторией………. 273

Open Source………………………………………………………………………………………………………………………………. 275

Фрагментация аудитории……………………………………………………………………………………………………….. 276

Взаимодействие с бизнес-аудиторией…………………………………………………………………………………… 277

Глава 39. Линейка сервисов API………………………………………………………….. 278

Горизонтальное разделение сервисов API……………………………………………………………………………. 278

Вертикальное разделение сервисов API………………………………………………………………………………… 279

Глава 40. Ключевые показатели эффективности API……………………………. 281

SLA……………………………………………………………………………………………………………………………………………. 283

Сравнение с конкурентами……………………………………………………………………………………………………… 284

Глава 41. Идентификация пользователей и борьба с фродом……………….. 285

Идентификация приложений и их владельцев………………………………………………………………………. 285

Идентификация конечных пользователей……………………………………………………………………………… 288

Глава 42. Технические способы борьбы с несанкционированным доступом к API          289

  1. Идентификация подозрительных пользователей……………………………………………………………… 289
  2. Запрос дополнительного фактора аутентификации………………………………………………………… 290
  3. Ограничение доступа………………………………………………………………………………………………………….. 290

Противодействие краже ключей…………………………………………………………………………………………….. 292

Глава 43. Поддержка пользователей API……………………………………………… 293

Документация…………………………………………………………………………………………………………………………… 295

Виды справочных материалов……………………………………………………………………………………………….. 296

  1. Спецификация/справочник/референс…………………………………………………………………………. 296
  2. Примеры кода……………………………………………………………………………………………………………….. 297
  3. Песочницы…………………………………………………………………………………………………………………….. 297
  4. Руководство (туториал)……………………………………………………………………………………………….. 298
  5. Часто задаваемые вопросы и база знаний…………………………………………………………………. 299
  6. Офлайн-документация…………………………………………………………………………………………………. 299

Проблемы дублирования контента………………………………………………………………………………………… 299

Качество документации………………………………………………………………………………………………………….. 300

Тестовая среда…………………………………………………………………………………………………………………………. 300

  1. API среды тестирования………………………………………………………………………………………………. 301
  2. Симулятор предопределенных сценариев…………………………………………………………………. 302

Автоматизация тестирования…………………………………………………………………………………………………. 302

Глава 44. Управление ожиданиями………………………………………………………. 303

Версионирование и жизненный цикл приложений……………………………………………………………….. 303

Поддержка платформ………………………………………………………………………………………………………………. 304

Движение вперед……………………………………………………………………………………………………………………… 304