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

Внимание, бестселлер: “Создание микрофронтендов”

Создание микрофронтендов

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

Для системных архитекторов, разработчиков и руководителей ИТ-проектов

Создание микрофронтендов» — один из тех редких примеров, когда все самые важные аспекты для успешного применения технической идеи на практике собраны в одной книге.
Алессандро Чинелли, руководитель департамента разработки

Если вы — технический руководитель или программист, ищущий исчерпывающее руководство по разработке и внедрению микрофронтендов в организации, то Лука Меццалира написал эту книгу специально для вас.
Йенс Оливер Мейерт, руководитель проектов и автор сайта meiert.com

МАСШТАБИРОВАНИЕ КОМАНД И ПРОЕКТОВ, РАСШИРЕНИЕ ВОЗМОЖНОСТЕЙ РАЗРАБОТЧИКОВ

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

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

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

Книгу “Создание микрофронтендов” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Об авторе. 11

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

Введение. 15

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

Для кого эта книга. 16

Как устроена книга. 16

Условные обозначения и соглашения. 18

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

ГЛАВА 1. Виды фронтендов. 21

Микрофронтенд-приложения. 21

Одностраничные приложения. 23

Изоморфные приложения. 25

Статические сайты.. 27

Jamstack. 27

Резюме. 28

ГЛАВА 2. Принципы микрофронтендов. 29

От монолита к микросервисам.. 30

Переход на микросервисы.. 32

Введение в микрофронтенды.. 33

Принципы работы микросервисов. 35

Разделение на домены.. 36

Культура автоматизации. 36

Скрытые детали реализации. 36

Децентрализованное управление. 36

Независимое развертывание. 36

Изоляция сбоев. 37

Хорошая наблюдаемость. 37

Применение принципов к микрофронтендам.. 37

Разделение на домены.. 37

Культура автоматизации. 38

Сокрытие деталей реализации. 38

Децентрализованное управление. 38

Независимое развертывание. 38

Изоляция сбоев. 39

Хорошая наблюдаемость. 39

Микрофронтенды не универсальное решение. 39

Резюме. 40

ГЛАВА 3. Микрофронтенд-архитектуры и связанные с ними трудности. 41

Структура принятия решений. 41

Определение микрофронтендов. 42

Предметно-ориентированный подход к микрофронтендам.. 43

Как определить ограниченный контекст. 45

Композиция микрофронтендов. 46

Маршрутизация для микрофронтендов. 48

Взаимодействие между микрофронтендами. 50

Микрофронтенды на практике. 53

Zalando. 53

HelloFresh. 53

Allegro Tech. 53

Spotify. 54

SAP. 55

OpenTable. 55

DAZN.. 55

Резюме. 56

ГЛАВА 4. Типы микрофронтенд-архитектуры.. 57

Структура принятия решений в действии. 57

Вертикальное разделение. 58

Горизонтальное разделение. 59

Анализ архитектуры.. 61

Архитектура и компромиссы.. 62

Архитектуры с вертикальным разделением.. 63

Оболочка приложения. 63

Сложности. 65

Реализация системы проектирования. 72

Простота и скорость разработки. 75

SEO-оптимизация. 75

Производительность и микрофронтенды.. 76

Доступные фреймворки. 79

Примеры применения. 80

Характеристики архитектуры.. 81

Архитектуры с горизонтальным разделением.. 83

На стороне клиента. 84

Сложности. 87

SEO-оптимизация. 94

Простота и скорость разработки. 95

Примеры применения. 96

Module Federation. 97

Iframe. 103

Веб-компоненты.. 110

На стороне сервера. 114

На границе сети. 124

Резюме. 128

ГЛАВА 5. Техническая реализация микрофронтендов. 129

Проект. 129

Введение в Module Federation. 132

Техническая реализация. 134

Структура проекта. 134

Оболочка приложения. 136

Микрофронтенд аутентификации. 142

Микрофронтенд каталога. 144

Микрофронтенд управления аккаунтами. 146

Развитие проекта. 150

Внедрение традиционного приложения. 150

Разработка интерфейса оформления заказа. 152

Реализация динамических удаленных контейнеров. 154

Зависимость от webpack. 154

Резюме. 155

ГЛАВА 6. Создание и развертывание микрофронтендов. 157

Принципы автоматизации. 158

Быстрая обратная связь. 159

Частые итерации. 160

Поддержка команд. 161

Установка ограничений. 161

Разработка стратегии тестирования. 162

Простота и скорость разработки. 162

Горизонтальное и вертикальное разделение. 163

Шаблоны микрофронтендов. 164

Стратегия деления на среды.. 165

Контроль версий. 165

Монорепозиторий. 165

Несколько репозиториев. 169

Возможное будущее для системы контроля версий. 172

Стратегии непрерывной интеграции. 173

Тестирование микрофронтендов. 174

Функции проверки соответствия. 178

Операции, специфические для микрофронтендов. 180

Стратегии развертывания. 181

Сине-зеленое развертывание и канареечные релизы.. 181

Паттерн “душитель”. 184

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

Резюме. 187

ГЛАВА 7. Конвейер автоматизации для микрофронтендов:
практический пример. 189

Подготовка. 189

Контроль версий. 191

Инициализация конвейера. 192

Проверка качества кода. 193

Сборка. 194

Проверка после сборки. 195

Развертывание. 197

Итоги по стратегии автоматизации. 197

Резюме. 198

ГЛАВА 8. Бэкенд-архитектуры, совместимые с микрофронтендами. 199

Интеграция API и микрофронтенды.. 199

Работа со словарем сервисов. 201

Работа со шлюзом API 208

Работа с паттерном BFF. 213

Использование GraphQL с микрофронтендами. 218

Рекомендации. 222

Резюме. 226

ГЛАВА 9. Миграция с монолита на микрофронтенды: практический пример  227

Контекст. 228

Стек технологий. 228

Взаимодействие пользователя с платформой. 229

Технические цели. 232

Стратегия миграции. 233

Структура принятия решений в действии. 233

Разделение одностраничного приложения на несколько поддоменов. 237

Выбор технологий. 240

Детали реализации. 244

Задачи оболочки приложения. 244

Инициализация приложения. 244

Связь для обмена данными. 245

Интеграция бэкенда. 247

Интеграция аутентификации в микрофронтенды.. 247

Управление зависимостями. 250

Интеграция дизайна. 251

Общие компоненты.. 252

Реализация канареечных релизов. 253

Локализация. 255

Резюме. 256

ГЛАВА 10. Внедрение микрофронтендов в организации. 259

Зачем нам микрофронтенды?. 259

Связь между организациями и программной архитектурой. 260

Как комитеты изобретают новое?. 261

Команды по функциям и команды по компонентам.. 264

Реализация системы управления для потоков коммуникации. 267

Запрос комментариев. 267

Реестр архитектурных решений. 268

Совершенствование потоков коммуникации. 270

Работай, начиная с конца. 270

Сообщество практиков и общие собрания. 271

Управление внешними зависимостями. 272

Децентрализованная организация. 274

Децентрализация и микрофронтенды.. 276

Резюме. 278

ПРИЛОЖЕНИЕ. Что сами разработчики и архитекторы думают
о микрофронтендах. 279

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

Лука Меццалира

Лука Меццалира — вице-президент по архитектуре в облачном стриминговом сервисе DAZN с более чем 15-летним опытом работы, архитектор решений на платформе AWS, всемирно известный спикер и автор. На протяжении последних 18 лет занимается созданием фронтендов для облачных приложений и сервисов, работал над передовыми проектами для мобильных, настольных и веб-приложений, телевизоров, приставок и встраиваемых устройств. В свободное время пишет для национальных и международных технических журналов, также является рецензентом в издательствах APress, Packt Publishing, Pragmatic Bookshelf и O’Reilly.

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

Встречайте хит: “Хакерство. Секреты мастерства”

Хакерство. Секреты мастерства

В сборнике избранных статей из журнала «Хакер» описаны способы поиска уязвимостей в сетевом оборудовании MikroTik и использования этого оборудования для постэксплуатации Windows. Показаны методы защиты MikroTik от хакерских атак. Рассказывается об эксплуатации XSS-уязвимостей DOM XSS с помощью Web Messaging, о поиске уязвимостей в приложениях Android на примере Viber и в драйвере AdGuard для Windows. Приводится подробное руководство по атакам NTLM Relay и защите от них. Даны инструкции по фаззингу JS-приложений при помощи Fuzzilli, описана ошибка use after free в движке Blink. Изложены практические способы реализации антиотладки в исполняемых файлах для Linux. Показано, как работает GRE-пивотинг поверх сетевого оборудования. Отдельная глава посвящена практическому способу спуфинга GPS.

Для читателей, интересующихся информационной безопасностью

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

Вы узнаете, как:

  • осуществлять атаки NTLM Relay и защищаться от них,
  • искать уязвимости в сетевом оборудовании MikroTik и использовать его для постэксплуатации,
  • обезопасить MikroTik от хакерских атак,
  • обнаруживать и использовать уязвимости DOM XSS,
  • выполнять фаззинг JS-приложений с помощью Fuzzilli,
  • использовать ошибку use after free в движке Blink,
  • искать уязвимости в приложениях Android на примере Viber,
  • заставить исполняемые файлы Linux сопротивляться отладке,
  • выявить уязвимость в драйвере AdGuard для Windows,
  • осуществлять GRE-пивотинг поверх сетевого оборудования,
  • подделывать данные, передаваемые GPS-спутниками.

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

Книгу “Хакерство. Секреты мастерства” можно купить со скидкой в интернет-магазине издательства “БХВ“.

  1. Caster Remix. Используем виртуальный MikroTik
    для постэксплуатации Windows (Caster)…………………………………………………. 11

Caster Remix……………………………………………………………………………………………………………………………….. 11

CHR Deploy………………………………………………………………………………………………………………………………… 12

VXLAN-туннелирование…………………………………………………………………………………………………………… 14

Атака…………………………………………………………………………………………………………………………………………… 16

Зачистка……………………………………………………………………………………………………………………………………… 16

Выводы……………………………………………………………………………………………………………………………………….. 17

  1. JavaScript альденте. Фаззим JS-движки при помощи Fuzzilli (sploitem [secware]) 19

Стенд…………………………………………………………………………………………………………………………………………… 19

JavaScript-движки……………………………………………………………………………………………………………….. 21

Подготовка фаззера…………………………………………………………………………………………………………………… 22

Сборка и фаззинг V8………………………………………………………………………………………………………………….. 25

Теория…………………………………………………………………………………………………………………………………. 25

Сборка…………………………………………………………………………………………………………………………………. 25

Фаззинг………………………………………………………………………………………………………………………………… 27

Сборка и фаззинг SpiderMonkey……………………………………………………………………………………………….. 28

Теория…………………………………………………………………………………………………………………………………. 28

Сборка…………………………………………………………………………………………………………………………………. 28

Фаззинг………………………………………………………………………………………………………………………………… 31

Сборка и фаззинг JavaScriptCore………………………………………………………………………………………………. 32

Теория…………………………………………………………………………………………………………………………………. 32

Сборка…………………………………………………………………………………………………………………………………. 32

Фаззинг………………………………………………………………………………………………………………………………… 34

Выводы……………………………………………………………………………………………………………………………………….. 35

  1. Жидкий хром. Как работает баг use after free в движке Blink (sploitem [secware]) 37

Стенд…………………………………………………………………………………………………………………………………………… 37

Теория…………………………………………………………………………………………………………………………………………. 39

Потоки сжатия……………………………………………………………………………………………………………………. 40

Promise…………………………………………………………………………………………………………………………………. 40

postMessage…………………………………………………………………………………………………………………………. 42

Запуск PoC………………………………………………………………………………………………………………………………….. 43

Анализ PoC…………………………………………………………………………………………………………………………………. 48

Анализ исходного кода……………………………………………………………………………………………………………… 49

Патч…………………………………………………………………………………………………………………………………………….. 53

Выводы……………………………………………………………………………………………………………………………………….. 53

  1. Препарируем Viber. Мини-гид по анализу приложений для Android (saruman9) 55

Цель…………………………………………………………………………………………………………………………………………….. 55

Разделяемые библиотеки…………………………………………………………………………………………………………… 56

Предварительные результаты анализа……………………………………………………………………………. 57

Функции………………………………………………………………………………………………………………………………………. 58

libFlatBuffersParser.so…………………………………………………………………………………………………………. 59

libsvg.so………………………………………………………………………………………………………………………………… 59

libnativehttp.so…………………………………………………………………………………………………………………….. 60

Другие библиотеки…………………………………………………………………………………………………………….. 61

Анализ цели………………………………………………………………………………………………………………………………… 61

Досягаемость функции………………………………………………………………………………………………………. 62

Фаззинг………………………………………………………………………………………………………………………………… 65

Harness……………………………………………………………………………………………………………………….. 67

Эксперименты и улучшения……………………………………………………………………………………………… 71

Выводы……………………………………………………………………………………………………………………………………….. 73

  1. Гид по NTLM Relay. Захватываем NTLM-аутентификацию
    для Relay-атаки (Владислав Дриев)………………………………………………………….. 75

Теория…………………………………………………………………………………………………………………………………………. 75

Захват с Responder…………………………………………………………………………………………………………………….. 77

Захват NTLM-аутентификации для Relay-атак………………………………………………………………………. 80

SMB (445/TCP)…………………………………………………………………………………………………………………………… 80

Coerce-атаки……………………………………………………………………………………………………………………….. 81

Ярлыки………………………………………………………………………………………………………………………………… 82

Триггерим вручную…………………………………………………………………………………………………… 83

MITM…………………………………………………………………………………………………………………………. 83

RPC (135/TCP)……………………………………………………………………………………………………………………………. 83

SweetPotato…………………………………………………………………………………………………………………………. 83

Триггерим вручную……………………………………………………………………………………………………………. 83

Пример получения аутентификации на DCE RPC…………………………………………………………… 84

HTTP (80/TCP)……………………………………………………………………………………………………………………………. 85

Coerce-атаки……………………………………………………………………………………………………………………….. 85

PrivExchange……………………………………………………………………………………………………………………….. 86

Триггерим вручную……………………………………………………………………………………………………………. 86

RemotePotato0……………………………………………………………………………………………………………………. 86

WCF (9389/TCP)…………………………………………………………………………………………………………………………. 87

Триггерим вручную……………………………………………………………………………………………………………. 88

RAW (произвольный TCP)…………………………………………………………………………………………………………. 88

Как получить NTLM-аутентификацию, если мешает NAT или МЭ……………………………………… 91

Бонус № 1……………………………………………………………………………………………………………………………………. 91

Бонус № 2……………………………………………………………………………………………………………………………………. 93

Защита………………………………………………………………………………………………………………………………………… 93

Выводы……………………………………………………………………………………………………………………………………….. 93

  1. Гид по NTLM Relay. Проводим Relay-атаки (Владислав Дриев)…………… 95

Клиенты………………………………………………………………………………………………………………………………………. 95

SMB (445/TCP)……………………………………………………………………………………………………………………. 95

LDAP (389/TCP, 636/TCP)……………………………………………………………………………………………….. 103

RPC (135/TCP)………………………………………………………………………………………………………………….. 109

HTTP (80/TCP)………………………………………………………………………………………………………………….. 112

Выводы……………………………………………………………………………………………………………………………………… 113

Бонус…………………………………………………………………………………………………………………………………………. 114

Защита………………………………………………………………………………………………………………………………………. 116

Итог…………………………………………………………………………………………………………………………………………… 116

  1. BloodHound. Натаскиваем ищейку на поиск NTLM Relay (Владислав Дриев) 117

Описание проблемы………………………………………………………………………………………………………………… 117

Анализ существующих решений……………………………………………………………………………………………. 118

Добавляем атрибуты……………………………………………………………………………………………………………….. 122

Пишем запросы………………………………………………………………………………………………………………………… 127

Выводы……………………………………………………………………………………………………………………………………… 134

  1. Как стать спутником. Спуфим GPS в 2023 году (qeewqq)………………….. 135

Теория……………………………………………………………………………………………………………………………………….. 135

GNSS………………………………………………………………………………………………………………………………….. 135

Частоты…………………………………………………………………………………………………………………………….. 136

Триангуляция и трилатерация………………………………………………………………………………………… 137

Простой способ определить координаты………………………………………………………………………. 138

TTFF…………………………………………………………………………………………………………………………………… 139

Практика…………………………………………………………………………………………………………………………………… 140

Оборудование…………………………………………………………………………………………………………………… 140

GPS-SDR-SIM……………………………………………………………………………………………………………………. 140

iPhone………………………………………………………………………………………………………………………………………… 145

На что обратить внимание……………………………………………………………………………………………………… 145

Выводы……………………………………………………………………………………………………………………………………… 146

  1. Неправильные эльфы. Учим исполняемые файлы Linux
    сопротивляться отладке (kclo3)…………………………………………………………….. 147

Language-theoretic Security и файлы-полиглоты……………………………………………………………………. 147

Parse tree differential attack……………………………………………………………………………………………………… 149

Requests smuggling в GitLab и Zoom……………………………………………………………………………………….. 149

Psychic Paper и CVE-2022-42855…………………………………………………………………………………….. 150

Доверенные сертификаты X.509 на произвольный домен……………………………………………. 150

ELF: запустить нельзя проанализировать……………………………………………………………………… 150

Парсеры ELF…………………………………………………………………………………………………………………………….. 151

Ядро ОС…………………………………………………………………………………………………………………………….. 151

Системные утилиты…………………………………………………………………………………………………………. 152

Отладчики, декомпиляторы, дизассемблеры, эмуляторы……………………………………………. 152

Ищем различия…………………………………………………………………………………………………………………………. 153

Фаззеры…………………………………………………………………………………………………………………………….. 153

Melkor………………………………………………………………………………………………………………………………… 154

Тестируем EDB…………………………………………………………………………………………………………………. 156

Проверяем GDB………………………………………………………………………………………………………………… 159

Radare2: r2hang………………………………………………………………………………………………………………… 160

Interactive Disassembler……………………………………………………………………………………………………. 165

Выводы……………………………………………………………………………………………………………………………………… 165

  1. DOM XSS через Web Messaging. Как работает легкий способ
    получить XSS с помощью postMessage (Андрей “W0lFreaK” Козлов)……….. 171

Что такое DOM?……………………………………………………………………………………………………………………….. 171

Как эксплуатируются DOM-based XSS?………………………………………………………………………………… 171

Механизмы безопасности кросс-доменного взаимодействия……………………………………………… 172

Web Messaging API…………………………………………………………………………………………………………………… 174

DOM-based XSS через Web Messaging……………………………………………………………………………………. 175

Origin Verification отсутствует…………………………………………………………………………………………. 175

Origin verification………………………………………………………………………………………………………………. 176

JSON Parse…………………………………………………………………………………………………………………………. 176

Выводы……………………………………………………………………………………………………………………………………… 177

  1. Sad guard. Ищем и эксплуатируем уязвимость в драйвере AdGuard для Windows (Марсель Шагиев)…………………………………………………………………………………………………………….. 179

Как все начиналось…………………………………………………………………………………………………………………. 179

Почему AdGuard………………………………………………………………………………………………………………………. 180

Поверхность атаки…………………………………………………………………………………………………………………… 180

Фаззинг……………………………………………………………………………………………………………………………………… 184

Подготовка……………………………………………………………………………………………………………………….. 184

DIBF…………………………………………………………………………………………………………………………………… 184

Реверс драйвера……………………………………………………………………………………………………………………….. 187

По следам фаззера…………………………………………………………………………………………………………………… 189

Еще немного реверса……………………………………………………………………………………………………………….. 190

Примитивы……………………………………………………………………………………………………………………………….. 191

Проблемы 1 и 2. KASLR…………………………………………………………………………………………………… 194

Проблема 3. Сравнение с index………………………………………………………………………………………. 195

Эксплуатация…………………………………………………………………………………………………………………………… 196

Демонстрация (видео)……………………………………………………………………………………………………………… 203

  1. Pivoting District. Как работает GRE-пивотинг
    поверх сетевого оборудования (Caster)…………………………………………………. 205

GRE                                                                                                                                                                 205

Лабораторная сеть………………………………………………………………………………………………………………….. 207

L3 GRE VPN поверх Cisco IOS………………………………………………………………………………………………… 208

L3 GRE VPN поверх RouterOS………………………………………………………………………………………………… 211

Обеспечение туннеля L2 GRE с поддержкой L2-атак………………………………………………………….. 214

Возможные проблемы с MTU…………………………………………………………………………………………………. 219

Перехват трафика с помощью Cisco ERSPAN……………………………………………………………………….. 220

Перехват трафика с помощью TZSP (Mikrotik)……………………………………………………………………… 222

Выводы……………………………………………………………………………………………………………………………………… 222

  1. Атаки на DHCP. Разбираем техники DHCP Starvation и DHCP Spoofing и защиту от них (Александр Михайлов)……………………………………………………………………………………………… 223

Теория……………………………………………………………………………………………………………………………………….. 223

Сообщения DHCP…………………………………………………………………………………………………………….. 223

Структура заголовка DHCP……………………………………………………………………………………………. 225

Тестируем DHCP на стойкость……………………………………………………………………………………………….. 226

Лабораторный стенд……………………………………………………………………………………………………….. 226

DHCP Starvation……………………………………………………………………………………………………………………….. 227

Rogue DHCP или DHCP Spoofing……………………………………………………………………………………. 230

Нейтрализуем атаки на DHCP-протокол………………………………………………………………………………. 232

Trusted- и Untrusted-порты………………………………………………………………………………………………. 232

Limit Rate………………………………………………………………………………………………………………………….. 234

Verify MAC-Address………………………………………………………………………………………………………….. 234

Port Security……………………………………………………………………………………………………………………….. 235

Выводы……………………………………………………………………………………………………………………………………… 237

  1. MikroTik Nightmare. Пентестим сетевое оборудование MikroTik
    (Caster)………………………………………………………………………………………………….. 239

Проблемы сетевой безопасности……………………………………………………………………………………………. 239

DAI…………………………………………………………………………………………………………………………………….. 239

RA Guard…………………………………………………………………………………………………………………………… 239

Абьюз DP…………………………………………………………………………………………………………………………… 240

Спуфинг в системе резервирования VRRPv3………………………………………………………………………… 240

Перечисление информации……………………………………………………………………………………………… 241

Инъекция…………………………………………………………………………………………………………………………… 242

GARP-кадр………………………………………………………………………………………………………………………… 243

Уклонение от трассировки………………………………………………………………………………………………. 244

Проблема асимметричной маршрутизации…………………………………………………………………… 244

Маршрутизация……………………………………………………………………………………………………………….. 245

Импакт………………………………………………………………………………………………………………………………. 245

RouterOS Traffic Hijacking………………………………………………………………………………………………………. 246

GreenDog — Easy Hack #196 (Caster Bootleg)………………………………………………………………… 246

TZSP…………………………………………………………………………………………………………………………………… 247

Угон трафика……………………………………………………………………………………………………………………. 248

Обработка TZSP-заголовков…………………………………………………………………………………………… 248

RouterOS Pivoting……………………………………………………………………………………………………………………… 250

L3 GRE VPN………………………………………………………………………………………………………………………. 250

L2 EoIP VPN……………………………………………………………………………………………………………………… 253

Выводы……………………………………………………………………………………………………………………………………… 254

  1. MikroTik Daymare. Защищаем оборудование MikroTik
    от хакерских атак (Caster)…………………………………………………………………….. 255

Неиспользуемые интерфейсы…………………………………………………………………………………………………. 255

Discovery-протоколы……………………………………………………………………………………………………………….. 256

Безопасность Winbox на L2……………………………………………………………………………………………………. 256

DHCP Snooping…………………………………………………………………………………………………………………………. 256

Настройка файрвола……………………………………………………………………………………………………………….. 257

Корректная обработка трафика……………………………………………………………………………………… 258

Аккуратная работа с ICMP…………………………………………………………………………………………….. 258

TTL Shift……………………………………………………………………………………………………………………………. 258

Риск DNS-флуда……………………………………………………………………………………………………………….. 258

Drop All Other…………………………………………………………………………………………………………………….. 259

Динамическая маршрутизация………………………………………………………………………………………………. 259

Пассивные интерфейсы……………………………………………………………………………………………………. 259

Криптографическая аутентификация…………………………………………………………………………….. 259

Безопасность системы резервирования VRRP………………………………………………………………………. 260

Проблема псевдобалансировки……………………………………………………………………………………… 260

Безопасность дерева STP………………………………………………………………………………………………………… 261

Осторожность при выборе STP Root………………………………………………………………………………. 262

Безопасность панели управления (MGMT)…………………………………………………………………………… 262

Защита RMI……………………………………………………………………………………………………………………… 262

Защита учетных записей на оборудовании………………………………………………………………….. 263

Выводы……………………………………………………………………………………………………………………………………… 263

«Хакер»: безопасность, разработка, DevOps…………………………………………. 265

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

Авторы

Caster, sploitem [secware], saruman9, Владислав Дриев, qeewqq, kclo3, Андрей “W0lFreaK” Козлов, Марсель Шагиев, Александр Михайлов

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

Новая книга: “HTML5 и CSS3. Мастер-класс”

HTML5 и CSS3. Мастер-класс

Книга посвящена разработке веб-сайтов и веб-приложений с нуля, с применением самых современных клиентских и серверных технологий, селекторов CSS и подходов к веб-дизайну. Рассмотрены стандарт CSS 3+, отрисовка на холсте (технология Canvas), адаптивный веб-дизайн (технологии Flexbox и Grid), технология SASS, расширяющая возможности CSS, а также художественные аспекты веб-дизайна, обеспечение кроссплатформенности  сайтов и приложений и приверженность отзывчивому веб-дизайну.

Для веб-дизайнеров и веб-разработчиков

От новичка к эксперту за 29 простых шагов.

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

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

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

  • Пошаговое руководство, в котором описано, как придумать, набросать, спроектировать, создать, протестировать и запустить веб-сайт или веб-приложение
  • Подробные примеры и иллюстрации работы с HTML и CSS
  • Разбор интерактивных технологий, в частности HTML5 Canvas, CSS-преобразования в 2D и 3D, Flexbox, CSS Grid
  • Технология SASS, являющаяся надстройкой над CSS
  • Программирование анимации, геолокации, аудиовизуальных эффектов
  • Технология отзывчивого веб-дизайна
  • Кроссплатформенная разработка

Здесь все, что нужно знать о современной веб-разработке.

Чему вы сможете научиться

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

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

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

Книгу “HTML5 и CSS3. Мастер-класс” можно купить со скидкой в интернет-магазине издательства “БХВ“.

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

Об авторе. 17

ГЛАВА 1. Начальные сведения о HTML5 и CSS3. 19

Введение. 19

Структура. 21

Цели  21

Знакомство с HTTP и HTML. 21

Знакомство с CSS. 24

Использование атрибутов id и class. 25

Чем обусловлена необходимость применения HTML5 и CSS3. 28

Заключение. 29

ГЛАВА 2. Установка веб-сервера. 31

Вступление. 31

Структура. 31

Цели  31

Представление о WAMP, MAMP и LAMP. 32

Установка под Windows. 32

Работа с корнем документа. 36

Установка под MacOS. 39

Работа с корнем документа. 41

Установка под Linux. 43

Работа с корнем документа. 44

Заключение. 44

ГЛАВА 3. Visual Studio Code. 45

Вступление. 45

Структура. 45

Цели  45

Популярность VS Code. 46

Установка VS Code под Windows. 47

Установка VS Code под MacOS. 49

Установка VS Code под Linux. 51

Начало работы с VS Code. 52

Заключение. 54

ГЛАВА 4. Консоль разработчика. 55

Вступление. 55

Структура. 55

Цели  55

Доступ к консоли разработчика. 56

Польза, извлекаемая из работы с консолью.. 60

Автозавершение. 61

Просмотр элементов. 63

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

ГЛАВА 5. Введение в HTML5. 67

Введение. 67

Структура. 67

Цели  68

HTML5 гораздо серьезнее, чем просто HTML4 + 1. 68

SVG и MathML. 79

Заключение. 80

ГЛАВА 6. Использование холста в HTML5. 81

Введение. 81

Структура. 81

Цели  81

Ускоренный курс JavaScript 82

Размещение кода внутри тегов <script>. 82

Размещение кода в отдельном файле. 85

Функция getElementByID() 87

Превращение холста в изображение. 88

Заключение. 90

ГЛАВА 7. Прямоугольники и заливки. 91

Введение. 91

Структура. 91

Цели  91

О примерах работы с холстом.. 92

Рисование прямоугольников. 93

Использование переменных. 94

Применение стилей рисования. 95

Изменение толщины линии. 96

Очистка прямоугольника. 97

Применение градиентной заливки. 98

Применение радиального градиента. 100

Разноцветные градиентные заливки. 101

Использование заполнения узором.. 103

Использование перемещения. 106

Заключение. 109

ГЛАВА 8. Надписи на холсте. 111

Введение. 111

Структура. 111

Цели  111

Создание надписей. 112

Изменение способа отображения текста. 112

Выравнивание текста. 113

Изменение толщины обводки. 115

Надписи с заполнением.. 118

Использование узора для заполнения надписи. 121

Заключение. 122

ГЛАВА 9. Рисование на холсте. 123

Введение. 123

Структура. 123

Цели  123

Рисование линий с использованием путей. 124

Применение заполнений. 128

Ограничения областей холста. 128

Рисование кривых линий. 131

Выбор направления. 132

Рисование дуги к конкретной точке. 136

Использование аттракторов. 138

Завершение и схождение линий. 141

Заключение. 144

ГЛАВА 10. Работа с холстом.. 145

Введение. 145

Структура. 145

Цели  145

Рисование с использованием изображений. 146

Извлечение частей изображений. 148

Использование холста в качестве исходного изображения. 149

Прикрепление теней. 151

Тени прикрепляются не только к изображениям.. 153

Непосредственное редактирование пикселей. 154

Как хранятся данные о цвете. 156

Последовательный перебор данных. 157

Обработка данных изображения. 157

Усреднение данных о цвете. 158

Другие эффекты.. 158

Создание собственных данных изображения. 162

Заключение. 162

ГЛАВА 11. Расширенные возможности работы с холстом.. 163

Введение. 163

Структура. 163

Цели  163

Выстраивание композиции и прозрачность. 164

Использование цикла. 167

Рисование изображения. 167

Изменение прозрачности. 168

Применение преобразований. 169

Использование поворотов. 171

Применение перемещений. 172

Применение сразу нескольких преобразований. 173

Заключение. 173

ГЛАВА 12. Применение геолокации. 175

Введение. 175

Структура. 175

Цели  176

Что такое GPS. 176

Альтернативы применению GPS. 176

Проверка доступности геолокации. 177

Использование консоли разработчика. 179

Перенаправление пользователей. 180

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

Именованные функции. 184

Когда получено разрешение. 185

Заключение. 186

ГЛАВА 13. Работа с формами. 187

Введение. 187

Структура. 187

Цели  187

Атрибуты формы HTML5. 188

Атрибут autofocus. 188

Атрибут autocomplete. 190

Атрибут form.. 191

Атрибут formaction. 193

Другие переопределения формы.. 194

Атрибут multiple. 195

Атрибут novalidate. 196

Атрибуты width и height 196

Атрибут list и теги <datalist> и <option>. 197

Атрибуты min, max и step. 198

Другие типы ввода даты и времени. 200

Атрибут pattern. 200

Атрибут placeholder 201

Атрибут required. 202

Тип ввода color 203

Числа и диапазоны.. 204

Тип ввода search. 206

Заключение. 207

ГЛАВА 14. Локальное хранилище и многое другое. 209

Введение. 209

Структура. 209

Цели  209

Использование локального хранилища. 210

Хранение и извлечение локальных данных. 210

Удаление и очистка локальных данных. 213

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

Микроданные. 214

Веб-воркеры.. 217

Автономные веб-приложения. 220

Как работают автономные веб-приложения. 220

Перетаскивание. 222

Обмен сообщениями между документами. 223

Заключение. 223

ГЛАВА 15. Аудио и видео. 225

Введение. 225

Структура. 225

Цели  225

Аудио в HTML5. 226

Аудиокодеки. 226

Воспроизведение аудио. 227

Видео в HTML5. 229

Видеокодеки. 230

Воспроизведение видео. 230

Заключение. 236

ГЛАВА 16. Введение в CSS3. 237

Введение. 237

Структура. 237

Цели  237

Разработка CSS3 продолжается. 238

Новое в CSS3. 239

Селекторы атрибутов. 239

Фоновые решения. 240

Границы.. 242

Тени блоков. 244

Столбцы и перетекания. 246

Цвета и прозрачность. 247

Текстовые эффекты и шрифты.. 248

Перемещения и преобразования. 250

Flexbox-разметка. 252

Flexbox как отдельный модуль. 252

CSS grid. 255

Заключение. 258

ГЛАВА 17. Селекторы атрибутов CSS3. 259

Введение. 259

Структура. 259

Цели  259

Селекторы атрибутов CSS. 260

Селектор по имени атрибута. 260

Селектор по значению атрибута. 261

Селектор по слову из списка. 262

Селектор по дефису. 263

Селектор по начальным символам.. 264

Селектор по конечным символам.. 265

Глобальный селектор. 267

Флажок невосприимчивости к регистру символов. 268

Флажок восприимчивости к регистру символов. 269

Заключение. 270

ГЛАВА 18. Создание фона. 271

Введение. 271

Структура. 271

Цели  271

Обрезка и начало фона. 272

Литералы шаблонов. 272

Использование свойства background-clip. 274

Использование свойства background-origin. 275

Совместное использование обрезки и начала фона. 275

Раздел сценария JavaScript 278

Размер фона. 280

Использование градиентов. 282

Точки остановки цвета. 284

Удаленность точек остановки цвета и повторения. 284

Радиальные и конические градиенты.. 285

Заключение. 286

ГЛАВА 19. Построение границ. 287

Введение. 287

Структура. 287

Цели  287

Радиус границы.. 288

Цвета границ. 290

Градиентные границы.. 291

Использование нескольких фонов. 293

Использование одного изображения. 295

Заключение. 298

ГЛАВА 20. Свойства блока и текста. 299

Введение. 299

Структура. 299

Цели  299

Добавление теней. 299

Переполнение элементов. 302

Макет, составленный из нескольких колонок. 303

Заключение. 309

ГЛАВА 21. Цвета и прозрачность. 311

Введение. 311

Структура. 311

Цели  311

RGB-цвета. 312

Использование цветового круга. 315

RGBA-цвета. 316

HSL-цвета. 318

Применение прозрачности. 321

Заключение. 323

ГЛАВА 22. Текстовые эффекты и шрифты.. 325

Введение. 325

Структура. 325

Цели  326

Задание размеров блока. 326

Текстовое переполнение. 328

Перенос длинных слов. 329

Изменение размеров элементов пользователем.. 331

Выделение фокуса. 333

Текстовые тени. 334

Веб-шрифты.. 335

Заключение. 339

ГЛАВА 23. Двумерные преобразования. 341

Введение. 341

Структура. 341

Цели  342

Преобразования. 342

Переходы.. 344

Перемещения. 347

Ожидаемое вскоре свойство translate. 347

Масштабирование. 347

Вращение. 349

Наклон. 350

Использование матриц. 352

Заключение. 354

ГЛАВА 24. Трехмерная графика и анимация. 355

Введение. 355

Структура. 355

Цели  355

3D-преобразования. 356

Задание перспективы.. 358

Два способа изменения перспективы.. 360

Задание стиля преобразования. 362

Изменение исходной точки преобразования. 363

Работа в 3D-пространстве. 364

Управление кубом.. 366

3D-перемещение. 367

3D-масштабирование. 367

3D-вращение. 367

Видимость обратных сторон граней. 369

Заключение. 370

ГЛАВА 25. Макет Flexbox. 371

Введение. 371

Структура. 371

Цели  371

Сведения о Flexbox. 372

Создание интерактивной среды Flexbox. 372

Как работает пример. 375

Работа с примером.. 378

Flex-направление. 379

Перенос flex-элементов. 382

Выравнивание всего содержимого по главной оси. 382

Выравнивание элементов по поперечной оси. 386

Выравнивание всего содержимого по поперечной оси. 389

Другие свойства. 393

Заключение. 394

ГЛАВА 26. CSS Grid. 395

Введение. 395

Структура. 395

Цели  395

Сведения о CSS Grid. 396

Как работает пример. 399

Работа с примером.. 400

Задание потока Grid-элементов. 401

Выравнивание содержимого. 402

Выравнивание элементов. 407

Задание промежутков. 412

Изменение местоположения и размеров. 412

Заключение. 417

ГЛАВА 27. Знакомство с Sass. 419

Введение. 419

Структура. 419

Цели  420

Sass — достойное решение. 420

Сведения о Sass. 420

Различные версии Sass. 421

Установка под Windows. 421

Другие установщики под Windows. 424

Установка под MacOS. 424

Установка под Linux. 426

Альтернативные установки под Linux. 427

Препроцессинг в CSS. 428

Заключение. 429

ГЛАВА 28. Переменные и потоки выполнения в Sass. 431

Введение. 431

Структура. 431

Цели  431

Переменные в CSS. 432

Переменные в Sass. 434

Значения переменных, используемые по умолчанию.. 435

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

Принудительное задание глобальной видимости. 438

Управление потоком выполнения. 439

Sass-операторы.. 439

Sass-выражения (Sass-сценарий) 440

@if … @else. 441

Влияние скобок. 443

@else if. 443

@each … in. 444

@for … from … through. 445

@for … from … to. 447

@while. 448

Заключение. 448

ГЛАВА 29. Расширенный Sass. 449

Введение. 449

Структура. 449

Цели  450

Вложенность, используемая в Sass. 450

Вложенные свойства. 452

Наследование в Sass. 453

Использование миксинов. 455

Модули Sass. 456

Будущие версии. 457

Заключение. 458

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

Описание. 459

Чему вы сможете научиться. 460

Для кого эта книга. 460

Содержание. 461

Биография автора. 462

Robin Nixon

Робин Никсон (Robin Nixon) более 40 лет создаёт софт, разрабатывает сайты и веб-приложения и много лет пишет о сетевых технологиях, Интернете и вебе. В его портфолио более 200 журнальных статей и более 40 книг, переведённых на многие языки мира, в том числе, бестселлер «Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5». Кроме того, он создаёт и проводит собственные видеокурсы на тему Интернета.

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

Новинка: “Node.js, Express, MongoDB и React. 23 урока для начинающих”

Node.js, Express, MongoDB и React. 23 урока для начинающих

В книге 23 урока, более 40 практических упражнений и заданий для самостоятельной работы. Даны основы программирования на Node.js: проекты и манифесты, установка дополнительных библиотек, импорт и экспорт. Описан серверный веб-фреймворк Express: работа с запросами и ответами, маршрутизация, шаблонизатор EJS, обработка пользовательских данных, статических файлов, валидация, сохранение выгруженных файлов, вывод сообщений об ошибках и разграничение доступа. Показана работа с СУБД MongoDB: запись и выборка данных, фильтрация, сортировка, применение моделей Mongoose. Рассказано о двухзвенных веб-приложениях, бэкендах и фронтендах. Рассмотрено программирование бэкендов средствами Express и фронтендов с применением клиентского веб-фреймворка React. Затронуты вопросы повышения производительности и защищённости веб-приложений, ввод их в эксплуатацию. Электронный архив на сайте издательства содержит полный исходный код описанных в книге примеров.

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

Что такое MERN?

MERN — это «связка» из четырех ключевых технологий, применяемых при разработке веб-приложений на JavaScript, «фантастическая четверка» веб-программирования.

  • Последняя буква: «N» — это, безусловно, Node.js.
  • Вторая по счету буква: «E» — это веб-фреймворк Express. Веб-фреймворк — это программная библиотека, реализующая основную функциональность, своего рода каркас веб-приложения. Разработчик «навешивает» на этот каркас свои модули, добавляющие к нему нужные функции.
  • Первая буква: «M» — это СУБД MongoDB. MongoDB не только мощна и быстра, но и как будто специально предназначена для того, чтобы работать совместно с Node.js.
  • Предпоследняя буква: «R» — это клиентский веб-фреймворк React.

Современный бэкенд и фронтенд на Node.js

Простым языком, кратко, наглядно рассказывается о разработке веб-приложений на языке JavaScript, работающих в исполняющей среде Node.js. В книге 23 урока, более 40 практических упражнений и заданий для самостоятельной работы.

Вы узнаете, как

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

Вы изучите популярные программные платформы:

  • серверный веб-фреймворк Express;
  • документную СУБД MongoDB;
  • клиентский веб-фреймворк

Книгу “Node.js, Express, MongoDB и React. 23 урока для начинающих” можно купить со скидкой в интернет-магазине издательства “БХВ“.

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

Почему Node.js?…………………………………………………………………………………………………………………………. 15

Что такое MERN?………………………………………………………………………………………………………………………. 16

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

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

Часть I. Начала программирования на Node.js………………….. 21

Урок 1. Введение в Node.js……………………………………………………………………… 23

1.1. Упражнение. Запуск Node.js и работа в интерактивном режиме……………………………………. 24

1.2. Упражнение. Написание простейшего консольного Node-приложения………………………… 25

Теория………………………………………………………………………………………………………………………………….. 25

Практика……………………………………………………………………………………………………………………………… 26

1.3. Упражнение. Создание манифеста проекта……………………………………………………………………… 28

Теория………………………………………………………………………………………………………………………………….. 28

Практика……………………………………………………………………………………………………………………………… 29

1.4. Манифест проекта: подробности………………………………………………………………………………………. 32

1.4.1. Создание манифеста проекта………………………………………………………………………………….. 32

1.4.2. Формат JSON……………………………………………………………………………………………………………… 32

1.4.3. Структура манифеста проекта………………………………………………………………………………… 34

1.4.4. Нумерация версий…………………………………………………………………………………………………….. 35

1.5. Упражнение. Расцвечивание вывода приложения. Использование
дополнительных библиотек………………………………………………………………………………………………. 36

Теория………………………………………………………………………………………………………………………………….. 36

Практика……………………………………………………………………………………………………………………………… 37

1.6. Установка, обновление и удаление зависимостей. Реестр проекта……………………………….. 38

1.7. Экспорт, импорт и прогон………………………………………………………………………………………………….. 41

1.7.1. Экспорт………………………………………………………………………………………………………………………. 42

1.7.1.1. Экспорт по умолчанию……………………………………………………………………………….. 42

1.7.1.2. Множественный экспорт…………………………………………………………………………….. 42

Синтаксис № 1………………………………………………………………………………………………….. 43

Синтаксис № 2………………………………………………………………………………………………….. 43

1.7.1.3. Гибридный экспорт……………………………………………………………………………………… 44

1.7.2. Импорт……………………………………………………………………………………………………………………….. 44

1.7.2.1. Импорт по умолчанию………………………………………………………………………………… 44

1.7.2.2. Множественный импорт……………………………………………………………………………… 45

Синтаксис № 1………………………………………………………………………………………………….. 45

Синтаксис № 2………………………………………………………………………………………………….. 46

1.7.2.3. Гибридный импорт………………………………………………………………………………………. 46

1.7.2.4. Написание путей к модулям……………………………………………………………………….. 46

1.7.2.5. Как выполняется импорт?…………………………………………………………………………… 48

1.7.3. Прогон модулей………………………………………………………………………………………………………… 48

1.8. Окружение и переменные окружения………………………………………………………………………………… 49

1.9. Упражнение. Поддержка переменных окружения…………………………………………………………… 53

1.10. Упражнение. Написание сценариев проекта…………………………………………………………………. 55

Теория………………………………………………………………………………………………………………………………… 55

Практика……………………………………………………………………………………………………………………………. 55

1.11. Восстановление проекта………………………………………………………………………………………………….. 56

1.12. Самостоятельные упражнения………………………………………………………………………………………… 57

Урок 2. Основные принципы веб-разработки на Node.js………………………… 58

2.1. Как функционирует Всемирная паутина?………………………………………………………………………… 58

2.1.1. Клиенты и серверы. Ресурсы. Веб-серверы……………………………………………………………. 58

2.1.2. Интернет-адрес и его составляющие………………………………………………………………………. 59

2.1.3. Взаимодействие веб-обозревателя и веб-сервера………………………………………………….. 62

2.1.3.1. Клиентский запрос………………………………………………………………………………………. 62

2.1.3.2. Серверный ответ………………………………………………………………………………………….. 63

2.1.4. Веб-сайты и веб-приложения…………………………………………………………………………………… 64

2.1.4.1. Веб-сайт………………………………………………………………………………………………………… 64

2.1.4.2. Веб-приложение…………………………………………………………………………………………… 65

2.2. Упражнение. Написание простейшего тестового веб-приложения……………………………….. 66

2.3. События и их обработка…………………………………………………………………………………………………….. 68

2.4. Упражнение. Использование утилиты nodemon……………………………………………………………… 69

2.5. Утилита nodemon: подробности……………………………………………………………………………………….. 71

2.6. Упражнение. Реализация маршрутизатора……………………………………………………………………… 73

Теория………………………………………………………………………………………………………………………………….. 74

Практика……………………………………………………………………………………………………………………………… 74

2.7. Упражнение. Использование базы данных и модели………………………………………………………. 78

Теория………………………………………………………………………………………………………………………………….. 78

Практика……………………………………………………………………………………………………………………………… 78

2.8. Синхронные и асинхронные функции………………………………………………………………………………. 83

2.9. Самостоятельное упражнение…………………………………………………………………………………………… 86

Часть II. Веб-фреймворк Express………………………………………………… 87

Урок 3. Введение в Express…………………………………………………………………….. 89

3.1. Упражнение. Простейшее веб-приложение на Express……………………………………………………. 89

3.2. Приложение Express……………………………………………………………………………………………………………. 95

3.2.1. Создание объекта приложения………………………………………………………………………………… 95

3.2.2. Параметры приложения…………………………………………………………………………………………… 95

3.2.3. Запуск приложения…………………………………………………………………………………………………… 96

3.3. Клиентский запрос Express………………………………………………………………………………………………… 97

3.4. Серверный ответ Express………………………………………………………………………………………………….. 100

Урок 4. Маршрутизация и контроллеры………………………………………………. 104

4.1. Маршрутизатор Express. Маршруты и URL-параметры………………………………………………. 104

4.1.1. Встроенный маршрутизатор…………………………………………………………………………………. 104

4.1.2. Маршруты……………………………………………………………………………………………………………….. 104

4.1.2.1. Создание маршрутов…………………………………………………………………………………. 105

4.1.2.2. Написание шаблонных путей…………………………………………………………………… 106

4.1.2.3. URL-параметры и параметризованные маршруты………………………………… 108

4.1.2.4. Выполнение маршрутизации: устранение коллизий……………………………… 109

4.2. Контроллеры…………………………………………………………………………………………………………………….. 109

4.2.1. Объявление контроллеров……………………………………………………………………………………… 109

4.2.2. Указание контроллеров в маршрутах…………………………………………………………………… 111

4.2.3. Доступ к URL-параметрам и сведениям о совпавшем маршруте………………………. 111

4.3. Упражнение. Реализация маршрутизатора……………………………………………………………………. 112

4.4. Выделенный маршрутизатор…………………………………………………………………………………………… 114

4.4.1. Вложенные маршрутизаторы………………………………………………………………………………… 116

4.5. Упражнение. Использование выделенного маршрутизатора………………………………………. 118

4.6. Настройки маршрутизаторов………………………………………………………………………………………….. 118

4.6.1. Настройки встроенного маршрутизатора……………………………………………………………. 118

4.6.2. Настройки выделенных и вложенных маршрутизаторов…………………………………… 119

4.7. Вложенные приложения Express……………………………………………………………………………………… 119

Урок 5. Шаблоны. Шаблонизатор EJS…………………………………………………. 121

5.1. Упражнение. Использование шаблонов…………………………………………………………………………. 122

5.2. Интеграция Express и EJS…………………………………………………………………………………………………. 125

5.3. Написание шаблонов EJS. Команды EJS………………………………………………………………………… 125

5.4. Рендеринг шаблонов…………………………………………………………………………………………………………. 127

5.4.1. Задание контекста шаблона………………………………………………………………………………….. 128

5.5. Включения…………………………………………………………………………………………………………………………. 129

5.6. Упражнение. Использование включений………………………………………………………………………… 130

5.7. Настройки шаблонизатора EJS……………………………………………………………………………………….. 131

5.8. Упражнение. Стилизация приложения. CSS-фреймворк Picnic CSS……………………………… 132

Теория………………………………………………………………………………………………………………………………. 132

Практика………………………………………………………………………………………………………………………….. 132

Урок 6. Получение данных, отправленных пользователем…………………… 138

6.1. Настройка приложения для получения данных…………………………………………………………….. 138

6.1.1. Настройка обработки GET-параметров……………………………………………………………….. 138

6.1.2. Настройка обработки POST-параметров……………………………………………………………… 139

6.2. Получение отправленных данных………………………………………………………………………………….. 141

6.3. Упражнение. Поиск дел……………………………………………………………………………………………………. 141

6.4. Добавление, правка и удаление данных………………………………………………………………………… 144

6.4.1. Старый подход……………………………………………………………………………………………………….. 144

6.4.2. Новый подход…………………………………………………………………………………………………………. 145

6.4.3. Перекрытие HTTP-метода. Библиотека method-override…………………………………….. 146

6.5. Упражнение. Добавление, пометка и удаление дел………………………………………………………. 147

Урок 7. Посредники, статические файлы и обработка ошибок…………….. 155

7.1. Посредники………………………………………………………………………………………………………………………… 155

7.1.1. Привязка посредников……………………………………………………………………………………………. 156

7.1.2. Объявление посредников……………………………………………………………………………………….. 158

7.1.2.1. Объявление фабрик функций, выдающих посредники…………………………… 162

7.2. Упражнение. Написание первого посредника……………………………………………………………….. 162

7.3. Обработка статических файлов………………………………………………………………………………………. 163

7.4. Упражнение. Стилизация приложения с помощью собственной таблицы стилей……… 167

7.5. Обработка ошибок……………………………………………………………………………………………………………. 170

7.5.1. Оповещение о возникновении ошибки………………………………………………………………….. 170

7.5.1.1. Оповещение об ошибке средствами Node.js и Express……………………………. 171

7.5.1.2. Оповещение об ошибке средствами библиотеки http-errors…………………… 172

7.5.1.3. Оповещение об ошибках в асинхронных контроллерах
и посредниках…………………………………………………………………………………………………………. 173

7.5.2. Обработчики ошибок……………………………………………………………………………………………… 174

7.5.2.1. Обработчик ошибок по умолчанию…………………………………………………………. 174

7.5.2.2. Собственные обработчики ошибок………………………………………………………….. 174

7.6. Упражнение. Реализация обработки ошибок…………………………………………………………………. 175

Урок 8. Валидация……………………………………………………………………………….. 180

8.1. Валидация данных, полученных от пользователя………………………………………………………… 180

8.1.1. Валидация средствами JavaScript…………………………………………………………………………. 180

8.1.2. Валидация средствами библиотеки express-validator………………………………………….. 181

8.1.2.1. Введение в express-validator………………………………………………………………………. 181

8.1.2.2. Создание валидаторов………………………………………………………………………………. 182

8.1.2.3. Задание правил валидации………………………………………………………………………. 182

8.1.2.4. Задание очистителей…………………………………………………………………………………. 190

8.1.2.5. Задание модификаторов……………………………………………………………………………. 191

8.1.2.6. Последовательность выполнения правил валидации и очистителей…… 192

8.1.2.7. Получение сообщений об ошибках ввода……………………………………………….. 193

8.1.2.8. Получение данных, прошедших валидацию…………………………………………… 194

8.2. Упражнение. Валидация добавляемых дел……………………………………………………………………. 195

8.3. Валидация значений URL-параметров…………………………………………………………………………… 197

Урок 9. Cookie, серверные сессии и всплывающие сообщения…………….. 200

9.1. Cookie…………………………………………………………………………………………………………………………………. 200

9.1.1. Подготовка Express для работы с cookie. Библиотека cookie-parser………………….. 200

9.1.2. Работа с cookie………………………………………………………………………………………………………… 201

9.1.2.1. Создание cookie…………………………………………………………………………………………. 201

9.1.2.2. Получение cookie……………………………………………………………………………………….. 203

9.1.2.3. Удаление cookie…………………………………………………………………………………………. 203

9.2. Упражнение. Задание порядка вывода дел……………………………………………………………………. 203

9.3. Серверные сессии……………………………………………………………………………………………………………… 206

9.3.1. Подготовка Express для работы с серверными сессиями…………………………………….. 206

9.3.1.1. Библиотека express-session: обработка сессий……………………………………….. 206

9.3.1.2. Библиотека session-file-store: файловое хранилище сессий…………………… 209

9.3.2. Работа с серверными сессиями……………………………………………………………………………… 211

9.4. Всплывающие сообщения………………………………………………………………………………………………… 212

9.4.1. Работа со всплывающими сообщениями средствами библиотеки
express-session……………………………………………………………………………………………………………………. 213

9.4.2. Использование библиотеки express-flash-message……………………………………………….. 213

9.5. Упражнение. Отображение сообщений об ошибках ввода…………………………………………… 215

Урок 10. Выгрузка файлов……………………………………………………………………. 220

10.1. Выгрузка файлов средствами библиотеки multer………………………………………………………… 220

10.1.1. Получение генератора посредников…………………………………………………………………. 220

10.1.1.1. Задание хранилища выгруженных файлов………………………………………. 221

Хранилище DiskStorage………………………………………………………………………………… 221

Хранилище MemoryStorage…………………………………………………………………………… 223

10.1.1.2. Задание правил валидации выгруженных файлов…………………………… 224

10.1.1.3. Задание функции валидации выгруженных файлов………………………… 225

10.1.2. Получение посредников, сохраняющих выгруженные файлы……………………….. 227

10.1.3. Использование полученных посредников………………………………………………………… 229

10.1.4. Получение сведений о выгруженном файле……………………………………………………… 230

Особенности использования хранилища MemoryStorage………………………………. 231

10.2. Вывод выгруженных файлов…………………………………………………………………………………………. 231

10.2.1. Вывод средствами посредника, обрабатывающего статические файлы………. 231

10.2.2. Вывод в контроллерах……………………………………………………………………………………….. 232

10.3. Упражнение. Добавление иллюстраций к запланированным делам…………………………. 234

Урок 11. Разграничение доступа и промисификация……………………………. 240

11.1. Основы разграничения доступа…………………………………………………………………………………….. 240

11.1.1. Собственно разграничение доступа…………………………………………………………………. 240

11.1.2. Многопользовательские веб-приложения………………………………………………………… 242

11.1.3. Реализация разграничения доступа………………………………………………………………….. 242

11.2. Хеширование…………………………………………………………………………………………………………………… 243

11.2.1. Генерирование хешей…………………………………………………………………………………………. 243

11.2.1.1. Генерирование случайной соли…………………………………………………………. 244

11.2.2. Сверка хешей………………………………………………………………………………………………………. 245

11.3. Промисификация…………………………………………………………………………………………………………….. 246

11.4. Упражнение. Превращение веб-приложения в многопользовательское……………………. 246

11.4.1. Регистрация новых пользователей……………………………………………………………………. 246

11.4.2. Вход и выход……………………………………………………………………………………………………….. 254

11.4.3. Разграничение доступа к запланированным делам………………………………………… 260

11.5. Самостоятельные упражнения………………………………………………………………………………………. 262

Часть III. СУБД MongoDB. Модели Mongoose………………………… 263

Урок 12. СУБД MongoDB……………………………………………………………………… 265

12.1. Серверные СУБД и их преимущества перед «самоделками»……………………………………… 265

12.2. Введение в MongoDB……………………………………………………………………………………………………… 266

12.2.1. Базы данных, коллекции и документы……………………………………………………………… 267

12.2.2. Типы данных, поддерживаемые MongoDB………………………………………………………. 268

12.2.3. Встраивание и связывание документов…………………………………………………………….. 269

12.2.3.1. Встраивание вторичных документов в первичный………………………….. 269

12.2.3.2. Связывание вторичных документов с первичным……………………………. 271

12.2.4. Операции, выполняемые над документами………………………………………………………. 272

12.2.5. Индексы……………………………………………………………………………………………………………….. 273

12.3. Клиентская библиотека MongoDB………………………………………………………………………………… 274

12.3.1. Подключение к серверу MongoDB…………………………………………………………………….. 274

12.3.2. Выбор базы данных……………………………………………………………………………………………. 275

12.3.3. Выбор коллекции………………………………………………………………………………………………… 275

12.3.4. Добавление документов……………………………………………………………………………………… 276

12.3.4.1. Добавление одного документа…………………………………………………………… 276

12.3.4.2. Добавление нескольких документов………………………………………………….. 277

12.3.5. Поиск документа…………………………………………………………………………………………………. 278

12.3.5.1. Написание условий поиска………………………………………………………………… 278

Условия простого сравнения………………………………………………………………………… 279

Поиск документа по объектному идентификатору…………………………………….. 280

Условия, использующие операторы сравнения………………………………………….. 280

Составные условия, содержащие логические операторы…………………………. 281

12.3.5.2. Указание набора выдаваемых атрибутов…………………………………………. 284

12.3.5.3. Типы значений атрибутов у выдаваемого документа……………………… 285

12.3.6. Фильтрация документов…………………………………………………………………………………….. 285

12.3.6.1. Выдача всех документов из коллекции……………………………………………… 286

12.3.6.2. Сортировка выданных документов……………………………………………………. 286

12.3.6.3. Выдача части отфильтрованных документов………………………………….. 287

12.3.6.4. Курсор. Получение отфильтрованных документов…………………………. 287

12.3.7. Исправление документов……………………………………………………………………………………. 289

12.3.7.1. Исправление одного документа…………………………………………………………. 289

12.3.7.2. Исправление нескольких документов………………………………………………… 291

12.3.8. Удаление документов…………………………………………………………………………………………. 292

12.3.8.1. Удаление одного документа………………………………………………………………. 292

12.3.8.2. Удаление нескольких документов……………………………………………………… 292

12.4. Вместо упражнения………………………………………………………………………………………………………… 292

Урок 13. Mongoose: объектные модели и их написание………………………… 294

13.1. Введение в объектные модели. Mongoose…………………………………………………………………….. 294

13.2. Mongoose: подключение к базе данных……………………………………………………………………….. 295

13.3. Mongoose: создание моделей…………………………………………………………………………………………. 296

13.3.1. Схемы Mongoose…………………………………………………………………………………………………. 297

13.3.1.1. Написание перечней атрибутов…………………………………………………………. 297

13.3.1.2. Типы значений атрибутов, поддерживаемые Mongoose………………….. 297

13.3.1.3. Указание простых индексов……………………………………………………………….. 298

13.3.1.4. Дополнительные параметры атрибутов……………………………………………. 299

13.3.1.5. Создание схем……………………………………………………………………………………… 301

13.3.1.6. Указание индексов любой сложности……………………………………………….. 303

13.3.1.7. Виртуальные атрибуты и создание…………………………………………………… 303

13.3.2. Создание моделей……………………………………………………………………………………………….. 305

13.4. Упражнение. Перевод веб-приложения на работу с базой данных MongoDB (часть 1) 305

Урок 14. Mongoose: запись данных………………………………………………………. 310

14.1. Mongoose: добавление, правка и удаление документов……………………………………………… 310

14.1.1. Добавление документов……………………………………………………………………………………… 310

14.1.1.1. Добавление одного документа…………………………………………………………… 310

14.1.1.2. Добавление нескольких документов………………………………………………….. 311

14.1.2. Правка документов……………………………………………………………………………………………… 312

14.1.2.1. Правка одного документа…………………………………………………………………… 312

Способ первый: в стиле моделей Mongoose………………………………………………… 312

Способ второй: в стиле клиентской библиотеки MongoDB………………………. 314

14.1.2.2. Правка нескольких документов………………………………………………………….. 316

14.1.3. Удаление документов…………………………………………………………………………………………. 316

14.1.3.1. Удаление одного документа………………………………………………………………. 316

14.1.3.2. Удаление нескольких документов……………………………………………………… 317

14.2. Низкоуровневые и высокоуровневые инструменты…………………………………………………….. 317

14.3. Упражнение. Перевод веб-приложения на работу с базой данных MongoDB (часть 2) 318

Урок 15. Mongoose: выборка данных……………………………………………………. 324

15.1. Mongoose: поиск документов…………………………………………………………………………………………. 324

15.1.1. Базовые инструменты поиска……………………………………………………………………………. 324

15.1.1.1. Особенности указания значений в условиях поиска………………………… 325

15.1.2. Запрос к базе данных и получение результата……………………………………………….. 325

15.1.3. Конструирование запросов на поиск………………………………………………………………… 326

15.1.3.1. Условия простого сравнения………………………………………………………………. 327

15.1.3.2. Условия, использующие операторы сравнения………………………………… 328

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

15.1.3.4. Указание выдаваемых атрибутов………………………………………………………. 330

15.2. Mongoose: фильтрация документов………………………………………………………………………………. 331

15.2.1. Базовые инструменты фильтрации……………………………………………………………………. 331

15.2.2. Конструирование запросов на фильтрацию…………………………………………………….. 331

15.2.2.1. Сортировка документов……………………………………………………………………… 331

15.2.2.2. Выдача части отфильтрованных документов………………………………….. 332

15.3. Mongoose: получение количества документов…………………………………………………………….. 332

15.4. Упражнение. Перевод веб-приложения на работу с базой данных MongoDB (часть 3) 333

Урок 16. Mongoose: агрегатные вычисления и расширение моделей……. 334

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

16.1.1. Конвейер агрегатных вычислений и его создание…………………………………………… 334

16.1.1.1. Стадия фильтрации документов………………………………………………………… 336

16.1.1.2. Стадия сортировки документов…………………………………………………………. 336

16.1.1.3. Стадия формирования групп………………………………………………………………. 336

Поддерживаемые агрегатные вычисления………………………………………………….. 337

Выполнение агрегатных вычислений по всем документам из коллекции… 339

16.1.1.4. Стадия фильтрации групп…………………………………………………………………… 339

16.1.1.5. Стадия сортировки групп……………………………………………………………………. 340

16.1.1.6. Стадия выборки части групп……………………………………………………………… 340

16.1.2. Получение результатов агрегатных вычислений…………………………………………….. 341

16.1.3. Выборка связанных документов……………………………………………………………………….. 341

16.1.3.1. Стадия связывания документов………………………………………………………….. 341

16.1.3.2. Доступ к атрибутам поддокументов………………………………………………….. 342

16.1.3.3. Стадия разворачивания массива……………………………………………………….. 343

16.2. Упражнение. Создание веб-страницы наиболее активных пользователей………………. 344

16.3. Расширение функциональности моделей……………………………………………………………………… 346

16.3.1. Обычные методы моделей………………………………………………………………………………….. 346

16.3.2. Статические методы моделей……………………………………………………………………………. 348

16.3.3. Методы, задающие условия при конструировании запросов………………………… 348

16.4. Упражнение. Расширение моделей……………………………………………………………………………….. 349

16.5. Самостоятельные упражнения………………………………………………………………………………………. 351

Часть IV. Фронтенды и бэкенды. Веб-фреймворк React….. 353

Урок 17. Программирование бэкендов средствами Express………………….. 355

17.1. Традиционные и двухзвенные веб-приложения. Фронтенды и бэкенды……………………. 355

17.2. REST…………………………………………………………………………………………………………………………………. 357

17.2.1. Введение в REST…………………………………………………………………………………………………. 357

17.2.2. Практическая реализация REST………………………………………………………………………… 357

17.2.3. Разграничение доступа в стиле REST. Жетонная аутентификация……………….. 359

17.3. Программные инструменты, применяемые при разработке бэкендов……………………….. 360

17.3.1. Инструменты Express для отправки ответов…………………………………………………….. 360

17.3.2. Инструменты Express для проверки типа требуемых клиентом данных……….. 361

17.3.3. Инструменты Express для получения от пользователя данных
в формате JSON……………………………………………………………………………………………………………….. 362

17.3.4. Инструменты Mongoose для преобразования документов в JSON…………………. 363

17.4. Работа с жетонами пользователей средствами библиотеки jsonwebtoken……………….. 364

17.5. Обработка межсайтовых запросов. Библиотека cors………………………………………………….. 367

17.5.1. Проблема с доступом к «чужим» cookie……………………………………………………………. 370

17.6. Упражнение. Превращение веб-приложения в бэкенд………………………………………………… 370

Урок 18. Программирование фронтендов. React: компоненты……………… 382

18.1. Одностраничные фронтенды. Экраны………………………………………………………………………….. 382

18.2. Веб-фреймворк React……………………………………………………………………………………………………… 383

18.2.1. Введение в React…………………………………………………………………………………………………. 383

18.2.1.1. Компоненты…………………………………………………………………………………………. 383

18.2.1.2. Реактивные данные. Пропы и состояния компонентов…………………….. 385

18.2.1.3. Передача данных между компонентами. Спуск и подъем данных…. 385

18.2.1.4. Разработка React-фронтендов……………………………………………………………. 386

18.2.2. React-проект: создание и структура…………………………………………………………………. 387

18.2.2.1. Создание React-проекта……………………………………………………………………… 387

18.2.2.2. Структура React-проекта……………………………………………………………………. 387

18.2.3. Разработка компонентов……………………………………………………………………………………. 389

18.2.3.1. Объявление компонентов……………………………………………………………………. 389

18.2.3.2. Формирование содержимого компонентов. Язык JSX. Фрагменты…. 391

Указание встроенных стилей……………………………………………………………………….. 394

Условный вывод…………………………………………………………………………………………….. 394

Вывод последовательностей………………………………………………………………………… 395

Вывод потомков…………………………………………………………………………………………….. 396

18.2.3.3. Работа с состояниями компонентов…………………………………………………… 397

18.2.3.4. Обработка событий…………………………………………………………………………….. 398

18.2.3.5. Взаимодействие с элементами управления………………………………………. 399

18.2.3.6. Прямое обращение к DOM компонента. Рефы………………………………….. 400

Использование рефов для постоянного хранения данных………………………… 401

18.2.3.7. Хуки………………………………………………………………………………………………………. 401

18.2.3.8. Стилизация фронтенда……………………………………………………………………….. 404

18.2.3.9. Использование внедренных элементов в компонентах……………………. 406

18.2.4. Использование компонентов……………………………………………………………………………… 406

18.2.5. Запуск React-проекта на выполнение……………………………………………………………….. 407

18.3. Упражнение. Написание фронтенда (часть 1)……………………………………………………………… 407

18.3.1. Вывод перечня дел……………………………………………………………………………………………… 407

18.3.2. Поиск и сортировка дел……………………………………………………………………………………… 412

18.3.3. Реализация входа и выхода……………………………………………………………………………….. 415

Урок 19. React: контексты и маршрутизация……………………………………….. 420

19.1. Контексты React……………………………………………………………………………………………………………… 420

19.2. Упражнение. Написание фронтенда (часть 2)……………………………………………………………… 422

19.3. Навигация во фронтендах. Пакет React Router……………………………………………………………. 425

19.3.1. Основные понятия React Router…………………………………………………………………………. 426

19.3.2. Маршрутизация средствами React Router……………………………………………………….. 426

19.3.2.1. Маршрутизатор…………………………………………………………………………………… 426

19.3.2.2. Коммутатор………………………………………………………………………………………….. 427

19.3.2.3. Маршруты……………………………………………………………………………………………. 428

19.3.3. Навигация средствами React Router…………………………………………………………………. 429

19.3.3.1. Гиперссылки………………………………………………………………………………………… 429

Link: простая гиперссылка……………………………………………………………………………. 429

NavLink: расширенная гиперссылка……………………………………………………………. 430

19.3.3.2. Перенаправление…………………………………………………………………………………. 431

Компонент Navigate………………………………………………………………………………………. 431

Хук useNavigate()…………………………………………………………………………………………… 432

19.3.4. Получение значений URL-параметров……………………………………………………………… 432

19.3.5. Получение дополнительного значения…………………………………………………………….. 433

19.4. Упражнение. Написание фронтенда (часть 3)……………………………………………………………… 433

19.5. Самостоятельные упражнения………………………………………………………………………………………. 444

Часть V. Ввод веб-приложений в эксплуатацию……………… 445

Урок 20. Повышение производительности веб-приложений…………………. 447

20.1. Кеширование…………………………………………………………………………………………………………………… 447

20.1.1. Кеширование на стороне клиента…………………………………………………………………….. 448

20.1.1.1. Кеширование статических файлов средствами Express…………………… 448

20.1.1.2. Кеширование сгенерированных программно ресурсов
средствами Express…………………………………………………………………………………………….. 450

20.1.1.3. Управление кешированием средствами библиотеки
express-cache-ctrl…………………………………………………………………………………………………. 451

20.1.2. Кеширование на стороне сервера……………………………………………………………………… 453

20.1.2.1. Кеширование шаблонов средствами Express……………………………………. 453

20.1.2.2. Кеширование произвольных данных средствами библиотеки cache-manager  453

Библиотека cache-manager-fs-hash: файловое хранилище
кешированных данных………………………………………………………………………………….. 456

20.2. Сжатие ответов……………………………………………………………………………………………………………….. 457

20.3. Самостоятельные упражнения………………………………………………………………………………………. 458

Урок 21. Дополнительная защита веб-приложений………………………………. 459

21.1. Защита от других распространенных сетевых атак средствами библиотеки helmet. 459

21.2. Защита от атак CSRF……………………………………………………………………………………………………… 460

21.3. Защита базы данных MongoDB…………………………………………………………………………………….. 463

21.3.1. Создание суперадминистратора……………………………………………………………………….. 463

21.3.2. Создание пользователей…………………………………………………………………………………….. 465

21.3.3. Вход на сервер MongoDB в веб-приложении…………………………………………………… 466

21.4. Самостоятельные упражнения………………………………………………………………………………………. 467

Урок 22. Журналирование. Библиотека morgan…………………………………… 468

22.1. Введение в библиотеку morgan……………………………………………………………………………………… 468

22.2. Задание формата записей………………………………………………………………………………………………. 469

22.2.1. Предопределенные форматы……………………………………………………………………………… 469

22.2.2. Написание строк форматов……………………………………………………………………………….. 470

22.2.3. Расширенные инструменты для работы с форматами записей………………………. 471

22.2.3.1. Создание своих предопределенных форматов…………………………………. 471

22.2.3.2. Создание своих литералов для строк форматов………………………………. 472

22.3. Задание параметров журналирования…………………………………………………………………………. 473

22.3.1. Вывод журнала в файл……………………………………………………………………………………….. 473

22.3.2. Вывод журнала в последовательность файлов……………………………………………….. 474

22.4. Самостоятельное упражнение………………………………………………………………………………………. 476

Урок 23. Ввод веб-приложений в эксплуатацию…………………………………… 477

23.1. Отладочный и эксплуатационный режимы работы веб-приложения……………………….. 477

23.2. Подготовка фронтенда и бэкенда к эксплуатации………………………………………………………. 478

23.2.1. Подготовка бэкенда……………………………………………………………………………………………. 479

23.2.2. Подготовка фронтенда……………………………………………………………………………………….. 480

23.2.3. Создание эксплуатационной редакции фронтенда и встраивание ее
в бэкенд……………………………………………………………………………………………………………………………. 481

23.3. Подготовка веб-приложения к эксплуатации………………………………………………………………. 482

23.4. Развертывание веб-приложения…………………………………………………………………………………….. 483

23.5. Самостоятельные упражнения………………………………………………………………………………………. 483

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

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

Приложение 1. Node.js: подготовка к работе………………………………………… 488

П1.1. Установка Node.js…………………………………………………………………………………………………………… 488

П1.2. Проверка работоспособности Node.js………………………………………………………………………….. 493

Приложение 2. Visual Studio Code: установка и использование…………….. 494

П2.1. Установка Visual Studio Code………………………………………………………………………………………… 494

П2.2. Запуск и завершение работы Visual Studio Code…………………………………………………………. 500

П2.3. Главное окно Visual Studio Code…………………………………………………………………………………… 500

П2.4. Расширения Visual Studio Code и работа с ними…………………………………………………………. 503

П2.5. Работа с отдельными файлами……………………………………………………………………………………… 509

П2.5.1. Создание файлов………………………………………………………………………………………………… 509

П2.5.2. Открытие файлов………………………………………………………………………………………………… 510

П2.5.2.1. Работа с вкладками главной области……………………………………………….. 510

П2.5.2.2. Разделение главной области на секции…………………………………………….. 511

Разделение на секции при открытии файлов………………………………………………. 511

Разделение на секции после открытия файлов……………………………………………. 514

П2.5.3. Сохранение файлов……………………………………………………………………………………………. 514

П2.5.4. Отмена правок, сделанных в файле………………………………………………………………….. 515

П2.5.5. Закрытие файлов………………………………………………………………………………………………… 515

П2.6. Работа с папками……………………………………………………………………………………………………………. 516

П2.6.1. Открытие папки………………………………………………………………………………………………….. 516

П2.6.1.1. Область Открытые редакторы боковой панели…………………………….. 518

П2.6.2. Работа с содержимым открытой папки……………………………………………………………. 519

П2.6.2.1. Создание файлов и папок…………………………………………………………………… 519

П2.6.2.2. Открытие файлов………………………………………………………………………………… 520

П2.6.2.3. Закрытие файлов…………………………………………………………………………………. 520

П2.6.2.4. Переименование файлов и папок………………………………………………………. 520

П2.6.2.5. Перемещение файлов и папок……………………………………………………………. 521

П2.6.2.6. Удаление файлов и папок…………………………………………………………………… 521

П2.7. Работа с программным кодом……………………………………………………………………………………….. 521

П2.7.1. Автоматическая установка отступов……………………………………………………………….. 521

П2.7.2. Синтаксическая подсветка кода……………………………………………………………………….. 522

П2.7.3. Команды для работы с кодом……………………………………………………………………………. 522

П2.7.4. Списки быстрого выбора…………………………………………………………………………………… 522

П2.7.5. Подсказки по коду………………………………………………………………………………………………. 523

П2.7.6. Выявление ошибок……………………………………………………………………………………………… 524

П2.7.6.1. Ошибки времени компиляции…………………………………………………………….. 524

П2.7.6.2. Ошибки времени выполнения…………………………………………………………….. 525

П2.7.7. Просмотр структуры программного кода………………………………………………………… 526

П2.7.8. Поиск и замена……………………………………………………………………………………………………. 528

П2.7.8.1. Поиск и замена в файле из активной папки………………………………………. 528

Поиск………………………………………………………………………………………………………………. 528

Замена…………………………………………………………………………………………………………….. 529

П2.7.8.2. Поиск и замена в файлах……………………………………………………………………. 530

Поиск………………………………………………………………………………………………………………. 530

Замена…………………………………………………………………………………………………………….. 532

П2.8. Терминал…………………………………………………………………………………………………………………………. 533

П2.9. Отладка…………………………………………………………………………………………………………………………… 534

П2.9.1. Запуск приложения для отладки………………………………………………………………………. 535

П2.9.2. Точки останова…………………………………………………………………………………………………… 535

П2.9.3. Пошаговое выполнение кода…………………………………………………………………………….. 537

П2.9.4. Просмотр состояния приложения……………………………………………………………………… 539

П2.9.5. Просмотр вывода приложения………………………………………………………………………….. 541

П2.9.6. Создание конфигурации отладки……………………………………………………………………… 541

П2.10. Вспомогательные инструменты………………………………………………………………………………….. 543

П2.10.1. Область Сценарии NPM боковой панели……………………………………………………….. 543

П2.10.2. Палитра команд……………………………………………………………………………………………….. 544

П2.10.3. Создание нескольких главных окон……………………………………………………………….. 545

П2.10.4. Мини-карта……………………………………………………………………………………………………….. 546

П2.11. Настройка Visual Studio Code……………………………………………………………………………………… 547

П2.11.1. Задание параметров Visual Studio Code…………………………………………………………. 547

П2.11.2. Задание цветовой схемы………………………………………………………………………………….. 550

П2.11.3. Задание тем значков………………………………………………………………………………………… 551

Приложение 3. MongoDB: установка……………………………………………………. 552

Приложение 4. MongoDB Shell: установка и использование…………………. 558

П4.1. Установка MongoDB Shell……………………………………………………………………………………………… 558

П4.2. Запуск и завершение MongoDB Shell……………………………………………………………………………. 560

Приложение 5. MongoDB Compass: установка и использование…………… 561

П5.1. Установка MongoDB Compass……………………………………………………………………………………… 561

П5.2. Запуск и завершение работы MongoDB Compass………………………………………………………. 562

П5.3. Главное окно MongoDB Compass…………………………………………………………………………………. 563

П5.4. Работа с соединениями………………………………………………………………………………………………….. 564

П5.4.1. Создание соединений…………………………………………………………………………………………. 564

П5.4.2. Перечни соединений…………………………………………………………………………………………… 565

П5.4.3. Удаление соединений………………………………………………………………………………………… 566

П5.5. Подключение к серверам MongoDB и отключение от них…………………………………………. 566

П5.5.1. Подключение к серверу……………………………………………………………………………………… 566

П5.5.1.1. Правка соединения……………………………………………………………………………… 567

П5.5.1.2. Подключение с входом……………………………………………………………………….. 567

П5.5.2. Просмотр списка баз данных и коллекций………………………………………………………. 567

П5.5.3. Отключение от сервера……………………………………………………………………………………… 569

П5.6. Работа с базами данных………………………………………………………………………………………………… 569

П5.6.1. Создание базы данных………………………………………………………………………………………. 569

П5.6.2. Удаление базы данных………………………………………………………………………………………. 570

П5.7. Работа с коллекциями……………………………………………………………………………………………………. 570

П5.7.1. Создание коллекции…………………………………………………………………………………………… 570

П5.7.2. Удаление коллекции…………………………………………………………………………………………… 571

П5.8. Работа с индексами………………………………………………………………………………………………………… 571

П5.8.1. Создание индекса……………………………………………………………………………………………….. 571

П5.8.2. Удаление индекса………………………………………………………………………………………………. 573

П5.9. Работа с документами……………………………………………………………………………………………………. 574

П5.9.1. Добавление документов в коллекцию………………………………………………………………. 574

П5.9.2. Просмотр документов, имеющихся в коллекции……………………………………………… 575

П5.9.2.1. Фильтрация и сортировка документов……………………………………………… 577

П5.9.3. Правка и удаление документов…………………………………………………………………………. 578

П5.9.4. Прочие операции над документами…………………………………………………………………. 579

П5.10. Экспорт и импорт документов…………………………………………………………………………………….. 580

П5.10.1. Экспорт документов…………………………………………………………………………………………. 580

П5.10.2. Импорт документов………………………………………………………………………………………….. 581

П5.11. Встроенная программа Mongosh………………………………………………………………………………… 582

Приложение 6. Postman: установка и использование……………………………. 583

П6.1. Установка Postman………………………………………………………………………………………………………… 583

П6.2. Запуск и завершение работы Postman…………………………………………………………………………. 584

П6.3. Главное окно Postman……………………………………………………………………………………………………. 585

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

П6.4.1. Задание целевого интернет-адреса и HTTP-метода……………………………………….. 587

П6.4.2. Указание GET-параметров………………………………………………………………………………… 588

П6.4.3. Указание POST-параметров………………………………………………………………………………. 590

П6.4.4. Указание жетона пользователя для аутентификации…………………………………….. 590

П6.4.5. Указание заголовков запроса……………………………………………………………………………. 591

П6.4.6. Работа с cookie……………………………………………………………………………………………………. 591

П6.4.7. Отправка созданного клиентского запроса……………………………………………………… 594

П6.5. Просмотр серверных ответов………………………………………………………………………………………… 594

П6.5.1. Просмотр тела ответа………………………………………………………………………………………… 595

П6.5.2. Просмотр cookie, полученных с ответом…………………………………………………………. 596

П6.5.3. Просмотр заголовков ответа……………………………………………………………………………… 596

П6.6. Работа с вкладками главной области…………………………………………………………………………… 597

П6.7. Работа с историей Postman…………………………………………………………………………………………… 599

Приложение 7. Описание файлового архива………………………………………… 601

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

Дронов Владимир Александрович, профессиональный программист, писатель и журналист, работает с компьютерами с 1987 года. Автор более 30 популярных компьютерных книг, в том числе «Django 2.1. Практика создания веб-сайтов на Python», “HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера“, «Python 3. Самое необходимое», «Python 3 и PyQt 5. Разработка приложений», “Laravel. Быстрая разработка современных динамических Web-сайтов на PHP, MySQL, HTML и CSS“, “Angular 4. Быстрая разработка сверхдинамических Web-сайтов на TypeScript и PHP” и книг по продуктам Adobe Flash и Adobe Dreamweaver различных версий. Его статьи публикуются в журналах “Мир ПК” и “ИнтерФейс” (Израиль) и интернет-порталах “IZ City” и “TheVista.ru”.

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

Вышла книга Дуга Фаррелла “Python. Как стать профессионалом”

Python. Как стать профессионалом

Книга ориентирована на читателей, имеющих базовый опыт программирования на языке Python и желающих быстро научиться применять его в реальных проектах или изучить Python в качестве второго языка. Рассмотрен широкий круг тем от соблюдения чистоты кода и грамотного именования функций и переменных, до проектирования API, правил объектно-ориентированного программирования, обеспечения безопасности (аутентификация, авторизация) и взаимодействия с базами данных. Затронут широкий круг вопросов, связанных с программированием модулей на Python, автоматизацией задач, использования веб-фреймворков, в частности Flask.

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

Разработка приложений с Python и Flask

Программисту-новичку не терпится увидеть, как его код заработает. В свою очередь, разработчик-профессионал обязан писать софт, который был бы максимально надёжен. Хороший код должен работать быстро, легко масштабироваться, не доставлять проблем с поддержкой. Наконец, код должен быть безопасен, качественно спроектирован и документирован, его должно быть легко обновлять и версионировать.

Эта книга поможет вам пройти путь от начинающего Python-программиста до уверенного Python-разработчика.

Книга помогает понять, почему Python – самый популярный язык в мире – необыкновенно хорош для профессиональной разработки. Работая с этим языком, легко приобрести важные профессиональные навыки – научиться именовать переменные, функции и классы, продумывать и писать качественные API, пользоваться объектами. Также в ней объяснено, как справляться с неизбежными отказами, в особенности сетевыми, соблюдать ключевые правила обеспечения безопасности, подключаться к базам данных и научиться профессионально решать конкретные задачи в рамках больших проектов на Python.

Значительная часть книги посвящена Python-фреймворку Flask, упрощающему и ускоряющему серверную веб-разработку на Python, поддерживающему создание статических веб-страниц и способствующему интеграции серверной и клиентской частей веб-приложения.

Книгу “Python. Как стать профессионалом” можно купить со скидкой в интернет-магазине издательства “БХВ“.

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

Введение. 15

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

Об этой книге. 19

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

Структура книги: ее дорожная карта. 20

О коде. 22

Об авторе. 23

Глава 1. Становление питониста. 25

1.1. Стремление к обучению.. 26

1.2. Достижение целей. 27

1.2.1. Стиль мышления разработчика. 27

1.2.2. Создание приложений. 28

1.3. Использование языка Python. 28

1.3.1. Парадигмы программирования. 28

1.3.2. Создание сопровождаемого кода. 29

1.3.3. Производительность. 30

1.3.4. Сообщество приверженцев языка. 32

1.3.5. Инструментарий разработчика. 33

1.4. Выбор используемой версии Python. 34

1.5. Заключительные размышления. 35

1.6. Резюме. 35

Часть I. Закладка фундамента. 37

Глава 2. Подходящие имена. 39

2.1. Имена. 39

2.1.1. Присвоение имен. 41

2.1.2. Эксперимент по присвоению имен. 44

2.2. Пространства имен. 46

2.3. Пространства имен в языке Python. 47

2.3.1. Уровень встроенных модулей. 48

2.3.2. Уровень модуля. 49

2.3.3. Уровень функций. 53

2.3.4. Область видимости пространства имен. 54

2.3.5. Эксперимент с пространством имен. 56

2.4. Резюме. 60

Глава 3. API: давайте пообщаемся. 61

3.1. Начало разговора. 62

3.1.1. Соглашение, заключаемое между частями кода. 63

3.1.2. Что передается в качестве входных данных. 64

3.1.3. Что ожидается на выходе. 66

3.2. Работа API 69

3.2.1. Именование. 69

3.2.2. Параметры. 70

3.2.3. Возвращаемое значение. 73

3.2.4. Единственная ответственность. 73

3.2.5. Длина функции. 74

3.2.6. Идемпотентность. 75

3.2.7. Побочные эффекты. 75

3.3. Документация. 77

3.4. Заключительные размышления. 78

3.5. Резюме. 78

Глава 4. Объект разговора. 80

4.1. Объектно-ориентированное программирование. 80

4.1.1. Определение класса. 81

4.1.2. Рисование с помощью класса. 83

4.1.3. Наследование. 94

4.1.4. Полиморфизм. 102

4.1.5. Композиция. 103

4.2. Заключительные размышления. 107

4.3. Резюме. 107

Глава 5. Исключительные события. 109

5.1. Исключения. 111

5.2. Обработка исключений. 113

5.2.1. Обработка исключения, если код способен как-то исправить ситуацию.. 114

5.2.2. Предоставление исключениям возможности перемещаться вверх
по коду ваших программ. 114

5.2.3. Информирование пользователя. 115

5.2.4. Не стоит замалчивать исключения. 115

5.3. Выдача исключений. 120

5.4. Создание пользовательских исключений. 121

5.5. Заключительные размышления. 124

5.6. Резюме. 124

Часть II. Работа над конкретным заданием.. 125

Глава 6. Обмен информацией по Интернету. 127

6.1. Делитесь своей работой с другими. 127

6.1.1. Преимущества веб-приложений. 128

6.1.2. Сложности, связанные с использованием веб-приложений. 128

6.2. Серверы. 129

6.2.1. Модель “запрос — ответ”. 130

6.3. Веб-серверы. 131

6.4. Flask. 134

6.4.1. Почему именно Flask?. 134

6.4.2. Ваш первый веб-сервер. 135

6.4.3. Обслуживание содержимого. 138

6.4.4. Дополнительные функции Jinja2. 141

6.5. Запуск веб-сервера. 153

6.5.1. Gunicorn. 154

6.5.2. Коммерческий хостинг. 154

6.6. Заключительные размышления. 155

6.7. Резюме. 155

Глава 7. Работа со стилем.. 157

7.1. Стилизация приложения. 157

7.1.1. Создание привлекательных стилей. 158

7.1.2. Согласованность стилей. 158

7.1.3. Нормализация стилей. 159

7.1.4. Адаптивный дизайн. 159

7.2. Встраивание Bootstrap. 160

7.2.1. Предыдущий пример, теперь с Bootstrap. 160

7.3. Помощь в развитии приложения MyBlog. 169

7.3.1. Экземпляр приложения Flask. 169

7.4. Пространства имен. 174

7.4.1. Flask Blueprints 174

7.4.2. Добавление Blueprints в MyBlog. 175

7.4.3. Создание страницы “О сайте”. 179

7.4.4. Реструктуризированный app-экземпляр. 181

7.5. Навигация. 181

7.5.1. Создание навигационной информации. 182

7.5.2. Отображение навигационной информации. 183

7.5.3. Текущий вид MyBlog. 184

7.6. Конфигурация приложения. 186

7.6.1. Файлы конфигурации. 186

7.6.2. Закрытая информация. 186

7.7. Панель инструментов отладки Flask. 187

7.7.1. FlaskDynaConf 187

7.8. Регистрационная информация. 192

7.8.1. Конфигурация. 192

7.9. Добавление фавикона. 196

7.10. Заключительные размышления. 198

7.11. Резюме. 198

Глава 8. А я тебя знаю? Аутентификация. 200

8.1. Протокол HTTP, не имеющий состояния. 200

8.1.1. Сессии. 201

8.2. Запоминание пользователя. 202

8.2.1. Аутентификация. 203

8.2.2. Вход в систему. 213

8.3. Экстренные сообщения. 219

8.3.1. Усовершенствование формы входа. 220

8.4. Расширение круга друзей. 223

8.4.1. Blueprint-схема аутентификации. 224

8.4.2. Новая форма для пользователя. 225

8.4.3. Ах да: выход из системы. 228

8.5. Что дальше. 229

8.6. Резюме. 229

Глава 9. Какие действия вам разрешены? Авторизация. 230

9.1. Переход ко входу и выходу. 230

9.2. Подтверждение новых друзей. 232

9.2.1. Отправка электронной почты. 233

9.3. Сброс паролей. 239

9.4. Профили пользователей. 243

9.5. Безопасность. 246

9.5.1. Защита маршрутов. 246

9.6. Роли пользователей, задаваемые авторизацией. 247

9.6.1. Создание ролей. 247

9.6.2. Авторизация маршрутов. 250

9.7. Защита форм. 253

9.8. Заключительные размышления. 253

9.9. Резюме. 254

Глава 10. Выгоды от постоянства: базы данных. 255

10.1. Вторая половина дела. 255

10.1.1. Долговременное хранение информации. 256

10.2. Доступ к данным. 256

10.3. Системы управления базами данных. 262

10.3.1. Таблицы. 262

10.3.2. Отношения. 263

10.3.3. База данных транзакций. 266

10.3.4. Язык структурированных запросов SQL. 268

10.4. Использование SQLite в качестве базы данных. 271

10.5. SQLAlchemy. 271

10.5.1. Преимущества. 272

10.6. Моделирование базы данных. 272

10.6.1. Определение классов. 273

10.7. Создание и использование базы данных. 277

10.7.1. Добавление данных. 277

10.7.2. Использование данных. 280

10.8. Заключительные размышления. 283

10.9. Резюме. 283

Глава 11. Мне есть что сказать. 285

11.1. Публикации в MyBlog. 285

11.1.1. Моделирование баз данных. 286

11.2. Изменение порядка изложения материала. 289

11.3. Blueprint-схема контента. 289

11.4. Отображение и создание публикаций. 290

11.4.1. Обработчик отображения. 290

11.4.2. Шаблон отображения. 291

11.5. Создание публикаций. 292

11.5.1. Обработчик создания. 292

11.5.2. Форма создания. 293

11.5.3. Шаблон создания. 294

11.6. Отображение и редактирование публикации. 295

11.6.1. Обработчик отображения. 295

11.6.2. Шаблон отображения. 296

11.6.3. Обработчик обновления. 298

11.6.4. Форма обновления. 299

11.6.5. Шаблон обновления. 300

11.7. Иерархия контента для комментариев. 301

11.7.1. Изменение класса сообщения. 304

11.7.2. Обработчик отображения. 305

11.7.3. Шаблон отображения. 308

11.8. Создание комментариев. 310

11.8.1. Шаблон создания. 310

11.8.2. Форма создания. 311

11.8.3. Обработчик создания. 311

11.9. Уведомление пользователей. 312

11.10. Обработка ошибок сайта. 314

11.11. Заключительные размышления. 317

11.12. Резюме. 317

Глава 12. И что, на этом всё?. 319

12.1. Тестирование. 319

12.1.1. Модульное тестирование. 320

12.1.2. Функциональное тестирование. 321

12.1.3. Сквозное тестирование. 321

12.1.4. Интеграционное тестирование. 321

12.1.5. Нагрузочное тестирование. 321

12.1.6. Тестирование производительности. 321

12.1.7. Регрессионное тестирование. 322

12.1.8. Тестирование доступности. 322

12.1.9. Приемочное тестирование. 322

12.2. Отладка. 323

12.2.1. Воспроизведение ошибок. 323

12.2.2. Точки останова. 323

12.2.3. Ведение журнала. 324

12.2.4. Неприемлемые результаты. 324

12.2.5. Процесс исключения. 325

12.2.6. Проговаривание проблемы. 325

12.3. Инструменты. 325

12.3.1. Управление исходным кодом. 325

12.3.2. Оптимизация. 326

12.3.3. Контейнеры. 327

12.3.4. Базы данных. 327

12.3.5. Языки. 328

12.4. Среды операционных систем. 329

12.5. Облачные вычисления. 329

12.6. Сеть. 330

12.7. Сотрудничество. 330

12.8. Заключительные размышления. 331

12.9. Резюме. 331

Приложение. Ваша среда разработки. 333

П1. Установка Python. 333

П1.1. Windows 334

П1.2. Mac. 334

П1.3. Linux. 335

П2. Виртуальная среда Python. 336

П2.1. Windows 337

П2.2. Mac и Linux. 338

П3. Настройка Visual Studio Code. 339

П3.1. Установка Visual Studio Code. 339

П3.2. Установка Python-расширения. 340

П3.3. Другие полезные расширения. 340

П3.4. Запуск из командной строки. 341

П3.5. Запуск проекта. 341

П4. Ряд полезных советов. 343

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

Doug Farrell

Дуг Фаррелл (Doug Farrell) занимается разработкой программных средств с 1983 года, хотя имеет степени бакалавра по двум явно смежным областям — по физике и по прикладному искусству. Дуг — программист-самоучка, на протяжении многих лет использовавший немало языков во многих отраслях: Pascal, Fortran, C/C++, PHP, Python и JavaScript. С Python он работает с 2000 года, а с 2006 года Python стал его основным языком. Дуг написал множество статей для RealPython.com. Он также преподавал в центре STEM, где использовалась существенная часть материалов разработанного им обучающего курса.

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

Бестселлер: “Интернет-магазин без программирования”

Интернет-магазин без программирования

Книга рассказывает о том, как собрать работающий интернет-магазин из готовых блоков, подключить платежные системы и быстро запустить продажи. Приводится подробная инструкция по созданию и запуску интернет-магазина в социальной сети «ВКонтакте». Описаны возможности бесплатных он-лайн конструкторов Nethouse, ExpertPlus, Diafan, Битрикс24. Рассказано о выборе хостинга и регистрации домена для собственного интернет-магазина. Показано создание интернет-магазина с помощью конструктора сайтов Tilda. Рассмотрены функциональные возможности специализированных систем для создания интернет-магазинов  PHPShop, OpenCart, PrestaShop, Ecwid, а также плагина WooCommerce для CMS WordPress.

Для пользователей ПК

Откройте свой интернет-магазин без помощи программистов и дизайнеров за несколько простых шагов!

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

Эта книга расскажет, как организовать продажу товаров в социальной сети «ВКонтакте», а также познакомит вас с эффективными и бесплатными конструкторами, позволяющими собрать работающий интернет-магазин из готовых блоков, подключить платежные системы и быстро запустить продажи. Авторы подробно рассматривают возможности бесплатных специализированных  CMS для создания интернет-магазинов и сравнивают их функции. Прочитав эту книгу, вы сможете начать собственный путь в сферу он-лайн торговли, даже если не являетесь IT-специалистом.

В книге рассмотрены:

  • Интернет-магазины «ВКонтакте»
  • Он-лайн конструкторы Nethouse, ExpertPlus, Diafan, Битрикс24
  • Tilda
  • PHPShop
  • OpenCart
  • PrestaShop
  • Ecwid
  • WooCommerce

Книгу “Интернет-магазин без программирования” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………….. 7

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

Чего нет в этой книге?………………………………………………………………………………………………………………….. 8

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

Прежде, чем начать……………………………………………………………………………………………………………………. 11

Обратная связь…………………………………………………………………………………………………………………………… 12

Глава 1. Интернет-магазин в социальной сети «ВКонтакте»………………….. 13

Интернет-магазины в социальной сети «ВКонтакте»…………………………………………………………….. 13

Создание сообщества для интернет-магазина………………………………………………………………………… 17

Оформление сообщества: общие рекомендации…………………………………………………………………….. 24

Интернет-магазин: базовые товары…………………………………………………………………………………………. 27

Интернет-магазин: расширенные товары……………………………………………………………………………….. 29

Просмотр заказов……………………………………………………………………………………………………………….. 29

Настройка оплаты……………………………………………………………………………………………………………… 30

Дополнительные настройки……………………………………………………………………………………………… 31

Настройка доставки…………………………………………………………………………………………………………… 32

Скидки и промокоды………………………………………………………………………………………………………….. 33

Создание и редактирование товара…………………………………………………………………………………………. 35

Глава 2. Конструкторы интернет-магазинов………………………………………….. 39

Nethouse………………………………………………………………………………………………………………………………………. 40

ExpertPlus……………………………………………………………………………………………………………………………………. 43

Diafan………………………………………………………………………………………………………………………………………….. 45

«Битрикс24»……………………………………………………………………………………………………………………………….. 49

Подводя итог………………………………………………………………………………………………………………………………. 53

Глава 3. Создание интернет-магазина с помощью конструктора Tilda…… 55

Кратко о возможностях Tilda……………………………………………………………………………………………………. 55

Регистрация………………………………………………………………………………………………………………………………… 56

Выбор шаблона магазина и подключение карточек товаров……………………………………………….. 57

Добавление товаров в магазин…………………………………………………………………………………………………. 57

Способ 1. Добавляем товар вручную………………………………………………………………………………. 57

Способ 2. Добавляем товары через Каталог товаров…………………………………………………… 60

Работа с корзиной……………………………………………………………………………………………………………………… 63

Настройка денежных единиц для магазина……………………………………………………………………………. 64

Настройка платежной системы для оплаты товара………………………………………………………………. 66

Продажа единичного товара или услуги………………………………………………………………………………… 66

Продажа единичного товара через корзину……………………………………………………………………. 67

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

Глава 4. Домен и хостинг……………………………………………………………………….. 77

Основные понятия……………………………………………………………………………………………………………………… 77

Сайт…………………………………………………………………………………………………………………………………….. 77

Хостинг……………………………………………………………………………………………………………………………….. 77

Виртуальный хостинг………………………………………………………………………………………………. 78

Хостинг на выделенном сервере……………………………………………………………………………… 78

О бесплатном хостинге…………………………………………………………………………………………….. 78

Домен…………………………………………………………………………………………………………………………………… 79

Покупка домена и хостинга для сайта…………………………………………………………………………………….. 79

Пример настройки службы DNS……………………………………………………………………………………………….. 84

Резюме  86

Глава 5. Интернет-магазин на бесплатной версии PHPShop…………………… 87

Системные требования……………………………………………………………………………………………………………… 87

Установка…………………………………………………………………………………………………………………………………… 88

Обзор возможностей………………………………………………………………………………………………………………….. 91

Администрирование и настройка внешнего вида…………………………………………………………………… 93

Создание страницы……………………………………………………………………………………………………………………. 96

Управление меню………………………………………………………………………………………………………………………. 99

Добавление корзины………………………………………………………………………………………………………………….. 99

Возможности приема платежей……………………………………………………………………………………………… 100

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

Глава 6. Создание интернет-магазина на базе OpenCart………………………. 103

Коротко о CMS OpenCart………………………………………………………………………………………………………… 103

Особенности и функции OpenCart………………………………………………………………………………………….. 104

Загрузка и установка………………………………………………………………………………………………………………. 105

Базовые настройки………………………………………………………………………………………………………………….. 108

Установка русского языка………………………………………………………………………………………………. 110

Добавление шаблона оформления…………………………………………………………………………………………. 112

Управление категориями………………………………………………………………………………………………………… 114

Настройка производителей…………………………………………………………………………………………………….. 118

Управление атрибутами товаров…………………………………………………………………………………………… 119

Создание карточки товара……………………………………………………………………………………………………… 121

Управление продажами………………………………………………………………………………………………………….. 124

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

Глава 7. Интернет-магазин на основе бесплатной CMS PrestaShop………. 127

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

Функциональные возможности………………………………………………………………………………………………. 128

Установка…………………………………………………………………………………………………………………………………. 129

Пульт — административная панель PrestaShop……………………………………………………………………. 132

Управление внешним видом и установка шаблонов……………………………………………………………. 134

Просмотр и управление заказами………………………………………………………………………………………….. 136

Управление категорями, атрибутами и поставщиками……………………………………………………….. 138

Заполнение карточки товара………………………………………………………………………………………………….. 142

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

Глава 8. Создание магазина на Ecwid…………………………………………………… 149

Вариант 1: создаем магазин на платформе Ecwid + CMS WordPress………………………………….. 149

Регистрация………………………………………………………………………………………………………………………. 149

Добавление товара………………………………………………………………………………………………………….. 153

Настройка в Ecwid-магазине системы оплаты за товар……………………………………………….. 153

Вариант 2: создаем магазин на плагине Магазин Эквид……………………………………………………… 155

Шаг 1: добавление товаров…………………………………………………………………………………………….. 158

Шаг 2: настройка способа доставки………………………………………………………………………………. 161

Шаг 3: настройка способа оплаты…………………………………………………………………………………. 162

Шаг 4: сделайте тестовый заказ……………………………………………………………………………………… 163

Резюме………………………………………………………………………………………………………………………………………. 164

Глава 9. Плагин WooCommerce для создания магазина на WordPress…… 165

Кратко о WordPress………………………………………………………………………………………………………………….. 165

WooCommerce………………………………………………………………………………………………………………………….. 167

Настройка интернет-магазина на WooCommerce………………………………………………………………… 168

Подробный способ настройки плагина WooCommerce………………………………………………… 168

Вкладка Основные…………………………………………………………………………………………………… 168

Раздел Адрес магазина…………………………………………………………………………………… 168

Раздел Основные настройки………………………………………………………………………….. 169

Раздел Настройки валюты……………………………………………………………………………. 170

Вкладка Товары | Основные…………………………………………………………………………………… 171

Раздел Страницы магазина…………………………………………………………………………… 171

Раздел Габариты……………………………………………………………………………………………. 172

Вкладка Товары | Отзывы……………………………………………………………………………………… 172

Вкладка Товары | Запасы………………………………………………………………………………………. 173

Вкладка Товары | Скачиваемые товары………………………………………………………………. 173

Вкладка Платежи………………………………………………………………………………………………….. 175

Вкладка Аккаунты и приватность……………………………………………………………………….. 176

Раздел Политика конфиденциальности……………………………………………………….. 176

Вкладка Email’ы……………………………………………………………………………………………………… 178

Быстрый способ настройки плагина WooCommerce…………………………………………………….. 178

Делаем магазин главной страницей сайта…………………………………………………………………….. 182

Пример создания скачиваемых цифровых товаров………………………………………………………. 182

Советы по оформлению SEO-текста………………………………………………………………………………. 185

Как продавать виртуальный товар-услугу?………………………………………………………………….. 186

Добавление магазина в сервисы «Яндекса»………………………………………………………………….. 186

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

 

Валентин Холмогоров

Валентин Холмогоров — автор 49 книг, в том числе, «Термоядерный контент. Практическое руководство по созданию текстов для SMM», и более 400 публикаций в печатных СМИ, соавтор Сергея Лукьяненко, преподаватель, IT-журналист и блогер. В течение 8 лет трудился копирайтером и техническим писателем в одной из ведущих российских IT-компаний. Получил звание почетного профессора в Санкт-Петербургской Академии философии, экономики и права, где выступал с лекциями и обучал слушателей основам интернет-маркетинга. В настоящее время работает ведущим редактором в популярном журнале «Хакер».

 

Молочков Владимир Петрович

Владимир Петрович Молочков — кандидат педагогических наук, преподаватель высшей квалификационной категории Политехнического колледжа Новгородского госуниверситета им. Ярослава Мудрого. Автор 18 книг по компьютерной тематике и более 200 статей в СМИ.

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

Долгожданная “Библия C#. 6-е издание”

Библия C#. 6-е издание

Книга посвящена программированию на языке C#  для платформы Microsoft .NET, начиная с основ языка и разработки программ для работы в режиме командной строки и заканчивая созданием современных веб-приложений. Материал сопровождается большим количеством практических примеров. Подробно описывается логика выполнения каждого участка программы. Уделено внимание вопросам повторного использования кода. В 6-м издании примеры переписаны с учетом современной платформы .NET 7, большой упор сделан на веб–приложения и фреймворк доступа к данным  Entity Framework. На сайте издательства находятся коды программ, дополнительная справочная информация и копия базы данных для выполнения примеров из книги.

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

Программирование может быть доступно каждому!

Книга будет полезна всем, кто хочет научиться писать программы для платформы Microsoft .NET на современном и удобном языке программирования C#. Большое количество практических примеров, легкость изложения материала и интересные комментарии призваны сделать обучение занимательным и нескучным, а подробное описание логики выполнения каждого участка кода поможет читателю использовать полученные знания при разработке собственных приложений.
Дополнительным источником знаний в процессе дальнейшего обучения служит электронный архив к книге, содержащий коды программ, дополнительную справочную информацию и копию базы данных для выполнения примеров из книги.

  • Программирование для .NET на C#
  • Платформа .NET
  • Базы данных
  • Веб-программирование
  • Сетевое программирование
  • Повторное использование кода
  • Изучение языка на полезных примерах

…Невозможно научить программировать с помощью одной книги, но я попытаюсь заинтересовать вас этим великолепным миром. На сайте издательства выложено множество дополнительных материалов, которые пригодятся вам в самостоятельном изучении. Книга дает основную и необходимую информацию, чтобы вы сразу после ее прочтения смогли приступить к написанию своих собственных приложений …
Михаил Фленов

Книгу “Библия C#. 6-е издание” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Предисловие…………………………………………………………………………………………….. 9

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

Бонус……………………………………………………………………………………………………… 15

Структура книги……………………………………………………………………………………. 17

Глава 1. Введение в .NET……………………………………………………………………….. 19

1.1. Платформа .NET………………………………………………………………………………………………………………….. 19

1.1.1. «Кубики» .NET…………………………………………………………………………………………………………… 20

1.1.2. Сборки……………………………………………………………………………………………………………………….. 21

1.2. Обзор среды разработки Visual Studio .NET…………………………………………………………………….. 23

1.2.1. Работа с проектами и решениями……………………………………………………………………………. 23

1.2.2. Работа с файлами……………………………………………………………………………………………………… 31

1.3. Простейший пример .NET-приложения…………………………………………………………………………….. 31

1.3.1. Проект на языке C#…………………………………………………………………………………………………… 31

1.3.2. Компиляция и запуск проекта на языке C#…………………………………………………………….. 32

1.4. Компиляция приложений……………………………………………………………………………………………………. 34

1.4.1. Компиляция в .NET Framework………………………………………………………………………………… 34

1.4.2. Компиляция в .NET Core или .NET 5 и старше……………………………………………………….. 35

1.5. Поставка сборок………………………………………………………………………………………………………………….. 37

1.6. Формат исполняемого файла .NET……………………………………………………………………………………. 40

1.7. Код верхнего уровня…………………………………………………………………………………………………………… 41

Глава 2. Основы C#……………………………………………………………………………….. 42

2.1. Комментарии……………………………………………………………………………………………………………………….. 42

2.2. Переменная………………………………………………………………………………………………………………………….. 43

2.3. Именование элементов кода………………………………………………………………………………………………. 46

2.4. Работа с переменными……………………………………………………………………………………………………….. 49

2.4.1. Строки и символы…………………………………………………………………………………………………….. 52

2.4.2. Массивы…………………………………………………………………………………………………………………….. 55

2.4.3. Перечисления……………………………………………………………………………………………………………. 58

2.5. Простейшая математика…………………………………………………………………………………………………….. 61

2.6. Условные операторы………………………………………………………………………………………………………….. 66

2.6.1. Условный оператор if………………………………………………………………………………………………. 66

2.6.2. Условный оператор switch………………………………………………………………………………………. 69

2.6.3. Сокращенная проверка……………………………………………………………………………………………. 70

2.7. Циклы…………………………………………………………………………………………………………………………………… 71

2.7.1. Цикл for……………………………………………………………………………………………………………………… 71

2.7.2. Цикл while………………………………………………………………………………………………………………….. 74

2.7.3. Цикл do…while…………………………………………………………………………………………………………… 75

2.7.4. Цикл foreach………………………………………………………………………………………………………………. 76

2.8. Управление циклом…………………………………………………………………………………………………………….. 77

2.8.1. Оператор break…………………………………………………………………………………………………………. 77

2.8.2. Оператор continue…………………………………………………………………………………………………….. 78

2.9. Константы……………………………………………………………………………………………………………………………. 79

2.10. Нулевые значения…………………………………………………………………………………………………………….. 80

2.11. Начальные значения переменных…………………………………………………………………………………… 80

2.12. Системы счисления…………………………………………………………………………………………………………… 81

2.13. Логические операции……………………………………………………………………………………………………….. 84

Глава 3. Объектно-ориентированное программирование………………………. 86

3.1. Объекты на C#…………………………………………………………………………………………………………………….. 86

3.2. Свойства………………………………………………………………………………………………………………………………. 90

3.3. Методы………………………………………………………………………………………………………………………………… 96

3.3.1. Описание методов…………………………………………………………………………………………………….. 97

3.3.2. Параметры методов………………………………………………………………………………………………….. 99

3.3.3. Перегрузка методов………………………………………………………………………………………………… 107

3.3.4. Конструктор……………………………………………………………………………………………………………. 107

3.3.5. Статичность……………………………………………………………………………………………………………. 112

3.3.6. Рекурсия…………………………………………………………………………………………………………………… 115

3.3.7. Деструктор………………………………………………………………………………………………………………. 118

3.3.8. Упрощенный синтаксис…………………………………………………………………………………………. 119

3.4. Метод Main()……………………………………………………………………………………………………………………… 120

3.5. Оператор Using…………………………………………………………………………………………………………………. 122

3.6. Объекты только для чтения……………………………………………………………………………………………… 123

3.7. Объектно-ориентированное программирование……………………………………………………………. 124

3.7.1. Наследование…………………………………………………………………………………………………………. 124

3.7.2. Инкапсуляция………………………………………………………………………………………………………….. 128

3.7.3. Полиморфизм………………………………………………………………………………………………………….. 131

3.8. Наследование от класса Object……………………………………………………………………………………….. 133

3.9. Переопределение методов……………………………………………………………………………………………….. 134

3.10. Обращение к предку из класса………………………………………………………………………………………. 138

3.11. Вложенные классы…………………………………………………………………………………………………………. 140

3.12. Область видимости…………………………………………………………………………………………………………. 142

3.13. Ссылочные и простые типы данных…………………………………………………………………………….. 144

3.14. Проверка класса объекта……………………………………………………………………………………………….. 145

3.15. Неявный тип данных var………………………………………………………………………………………………… 146

3.16. Абстрактные классы………………………………………………………………………………………………………. 147

3.17. Инициализация свойств………………………………………………………………………………………………….. 150

3.18. Частицы класса……………………………………………………………………………………………………………….. 151

Глава 4. Консольные приложения………………………………………………………… 152

4.1. Украшение консоли………………………………………………………………………………………………………….. 153

4.2. Работа с буфером консоли……………………………………………………………………………………………….. 155

4.3. Окно консоли…………………………………………………………………………………………………………………….. 157

4.4. Запись в консоль……………………………………………………………………………………………………………….. 157

4.5. Чтение данных из консоли……………………………………………………………………………………………….. 160

Глава 5. Продвинутое программирование……………………………………………. 162

5.1. Приведение и преобразование типов………………………………………………………………………………. 162

5.2. Все в .NET — это объекты………………………………………………………………………………………………… 164

5.3. Работа с перечислениями Enum………………………………………………………………………………………. 166

5.3.1. Перечисления — это значения………………………………………………………………………………. 166

5.3.2. Перечисления-флаги………………………………………………………………………………………………. 169

5.4. Структуры…………………………………………………………………………………………………………………………. 172

5.5. Дата и время………………………………………………………………………………………………………………………. 177

5.6. Класс строк……………………………………………………………………………………………………………………….. 180

5.7. Перегрузка операторов…………………………………………………………………………………………………….. 183

5.7.1. Математические операторы………………………………………………………………………………….. 184

5.7.2. Операторы сравнения…………………………………………………………………………………………….. 186

5.7.3. Операторы преобразования………………………………………………………………………………….. 187

5.8. Шаблоны……………………………………………………………………………………………………………………………. 189

5.9. Анонимные типы……………………………………………………………………………………………………………….. 192

5.10. Кортежи…………………………………………………………………………………………………………………………… 194

5.11. Форматирование строк…………………………………………………………………………………………………… 195

5.12. Динамика…………………………………………………………………………………………………………………………. 196

Глава 6. Интерфейсы……………………………………………………………………………. 198

6.1. Объявление интерфейсов………………………………………………………………………………………………….. 199

6.2. Реализация интерфейсов………………………………………………………………………………………………….. 201

6.3. Использование реализации интерфейса…………………………………………………………………………. 202

6.4. Интерфейсы в качестве параметров………………………………………………………………………………… 205

6.5. Перегрузка интерфейсных методов…………………………………………………………………………………. 206

6.6. Наследование……………………………………………………………………………………………………………………. 208

6.7. Клонирование объектов…………………………………………………………………………………………………… 209

6.8. Реализация по умолчанию……………………………………………………………………………………………….. 210

Глава 7. Массивы, списки, коллекции и словари…………………………………. 213

7.1. Базовый класс для массивов……………………………………………………………………………………………. 213

7.2. Невыровненные массивы…………………………………………………………………………………………………. 215

7.3. Динамические массивы…………………………………………………………………………………………………….. 217

7.4. Индексаторы массива………………………………………………………………………………………………………. 220

7.5. Интерфейсы массивов………………………………………………………………………………………………………. 221

7.5.1. Интерфейс IEnumerable………………………………………………………………………………………….. 222

7.5.2. Интерфейсы IComparer и IComparable…………………………………………………………………. 225

7.6. Оператор yield…………………………………………………………………………………………………………………… 228

7.7. Стандартные списки…………………………………………………………………………………………………………. 229

7.7.1. Класс Queue…………………………………………………………………………………………………………….. 229

7.7.2. Класс Stack……………………………………………………………………………………………………………… 230

7.7.3. Класс Hashtable………………………………………………………………………………………………………. 231

7.8. Типизированные массивы………………………………………………………………………………………………… 233

7.9. Словарь……………………………………………………………………………………………………………………………… 236

Глава 8. Обработка исключительных ситуаций…………………………………… 238

8.1. Исключительные ситуации………………………………………………………………………………………………. 239

8.2. Исключения в C#……………………………………………………………………………………………………………….. 241

8.3. Оформление блоков try…………………………………………………………………………………………………….. 244

8.4. Ошибки в визуальных приложениях……………………………………………………………………………….. 245

8.5. Генерирование исключительных ситуаций……………………………………………………………………. 247

8.6. Иерархия классов исключений………………………………………………………………………………………… 248

8.7. Собственный класс исключения……………………………………………………………………………………… 249

8.8. Блок finally………………………………………………………………………………………………………………………… 252

8.9. Переполнение……………………………………………………………………………………………………………………. 253

8.10. Замечание о производительности…………………………………………………………………………………. 256

Глава 9. События…………………………………………………………………………………. 257

9.1. Делегаты……………………………………………………………………………………………………………………………. 257

9.2. События и их вызов…………………………………………………………………………………………………………… 258

9.3. Использование собственных делегатов………………………………………………………………………….. 261

9.4. Делегаты изнутри……………………………………………………………………………………………………………… 265

9.5. Анонимные методы…………………………………………………………………………………………………………… 267

Глава 10. LINQ…………………………………………………………………………………….. 268

10.1. LINQ при работе с массивами……………………………………………………………………………………….. 268

10.1.1. SQL-стиль использования LINQ………………………………………………………………………… 268

10.1.2. Использование LINQ через методы………………………………………………………………….. 271

10.2. Магия IEnumerable………………………………………………………………………………………………………….. 271

10.3. Доступ к данным…………………………………………………………………………………………………………….. 275

10.4. Использование LINQ для доступа к XML…………………………………………………………………….. 276

Глава 11. Хранение информации………………………………………………………….. 279

11.1. Файловая система…………………………………………………………………………………………………………… 279

11.2. Текстовые файлы…………………………………………………………………………………………………………….. 282

11.3. Бинарные файлы…………………………………………………………………………………………………………….. 285

11.4. XML-файлы……………………………………………………………………………………………………………………… 289

11.4.1. Создание XML-документов……………………………………………………………………………….. 289

11.4.2. Чтение XML-документов……………………………………………………………………………………. 293

11.5. Потоки Stream………………………………………………………………………………………………………………….. 296

11.6. Потоки MemoryStream…………………………………………………………………………………………………….. 297

11.7. Сериализация………………………………………………………………………………………………………………….. 299

11.7.1. Отключение сериализации………………………………………………………………………………… 302

11.7.2. Сериализация в XML…………………………………………………………………………………………. 304

11.7.3. Особенности сериализации……………………………………………………………………………….. 305

11.7.4. Управление сериализацией……………………………………………………………………………….. 307

Глава 12. Многопоточность………………………………………………………………….. 310

12.1. Класс Thread……………………………………………………………………………………………………………………. 311

12.2. Передача параметра в поток…………………………………………………………………………………………. 314

12.3. Конкурентный доступ…………………………………………………………………………………………………….. 316

12.4. Пул потоков…………………………………………………………………………………………………………………….. 318

12.5. Домены приложений .NET……………………………………………………………………………………………… 320

12.6. Ключевые слова async и await………………………………………………………………………………………. 323

12.7. Задачи или потоки — что выбрать?……………………………………………………………………………… 330

Глава 13. Добро пожаловать в веб-программирование…………………………. 332

13.1. Создание первого веб-приложения……………………………………………………………………………….. 332

13.2. Работа с конфигурацией сайта……………………………………………………………………………………… 339

13.3. Работа со статичными файлами……………………………………………………………………………………. 342

13.4. Модель – Представление – Контроллер………………………………………………………………………. 343

13.5. Маршрутизация………………………………………………………………………………………………………………. 345

13.6. Подробнее про контроллеры…………………………………………………………………………………………. 352

13.7. Представления………………………………………………………………………………………………………………… 355

13.8. Модель представления…………………………………………………………………………………………………… 359

13.9. Представления Razor……………………………………………………………………………………………………… 362

13.9.1. Комментарии………………………………………………………………………………………………………. 362

13.9.2. Вывод данных в представлениях……………………………………………………………………… 363

13.9.3. C#-код………………………………………………………………………………………………………………….. 364

13.9.4. Условные операторы…………………………………………………………………………………………. 365

13.9.5. Циклы…………………………………………………………………………………………………………………… 367

13.9.6. Исключительные ситуации……………………………………………………………………………….. 370

13.9.7. Ключевое слово using………………………………………………………………………………………… 370

13.10. Создание представлений……………………………………………………………………………………………… 372

13.10.1. Макеты………………………………………………………………………………………………………………. 372

13.10.2. Стартовый файл……………………………………………………………………………………………….. 376

13.10.3. Встраиваемые представления…………………………………………………………………………. 378

13.10.4. Компоненты………………………………………………………………………………………………………. 382

13.10.5. Секции……………………………………………………………………………………………………………….. 385

13.11. Работа с формами…………………………………………………………………………………………………………. 386

13.12. Проверка данных………………………………………………………………………………………………………….. 391

13.13. Работа с сессиями…………………………………………………………………………………………………………. 395

13.14. Cookie…………………………………………………………………………………………………………………………….. 397

13.15. Доступ к запросу…………………………………………………………………………………………………………… 399

Глава 14. Базы данных………………………………………………………………………… 401

14.1. Библиотека ADO.NET…………………………………………………………………………………………………….. 401

14.2. Строка подключения………………………………………………………………………………………………………. 403

14.3. Подключение к базе данных………………………………………………………………………………………….. 405

14.4. Инъекция зависимостей на примере подключений……………………………………………………… 408

14.5. Пул соединений………………………………………………………………………………………………………………. 412

14.6. Чтение данных из БД………………………………………………………………………………………………………. 413

14.7. Запросы с параметрами…………………………………………………………………………………………………. 417

14.8. Редактирование данных…………………………………………………………………………………………………. 420

14.9. Транзакции………………………………………………………………………………………………………………………. 421

14.10. Библиотека Dapper……………………………………………………………………………………………………….. 422

Глава 15. Entity Framework Core………………………………………………………….. 425

15.1. Создаем EF-приложение………………………………………………………………………………………………… 426

15.2. Код первичен…………………………………………………………………………………………………………………… 427

15.3. Контекст базы данных……………………………………………………………………………………………………. 429

15.4. Доступ к базе данных…………………………………………………………………………………………………….. 431

15.5. Миграции…………………………………………………………………………………………………………………………. 433

15.6. База данных первична……………………………………………………………………………………………………. 439

15.7. LINQ…………………………………………………………………………………………………………………………………. 441

15.8. Связи: один ко многим……………………………………………………………………………………………………. 442

15.9. Работа со связями……………………………………………………………………………………………………………. 444

15.10. Связи: многие ко многим………………………………………………………………………………………………. 446

15.11. Связи: один к одному……………………………………………………………………………………………………. 451

15.12. Журналы……………………………………………………………………………………………………………………….. 453

15.13. Как сохраняются данные?…………………………………………………………………………………………… 456

15.14. Погружение в запросы………………………………………………………………………………………………….. 459

15.15. Асинхронный доступ……………………………………………………………………………………………………. 468

15.16. Поиск по шаблону………………………………………………………………………………………………………… 469

15.17. Удаление данных………………………………………………………………………………………………………….. 470

15.18. Отслеживание изменений…………………………………………………………………………………………….. 471

15.19. Погружение в связи……………………………………………………………………………………………………….. 475

Глава 16. Повторное использование кода…………………………………………….. 481

16.1. Библиотеки………………………………………………………………………………………………………………………. 481

16.2. Создание библиотеки……………………………………………………………………………………………………… 482

16.3. Приватные сборки…………………………………………………………………………………………………………… 488

Глава 17. Сетевые сервисы…………………………………………………………………… 490

17.1. История……………………………………………………………………………………………………………………………. 490

17.2. Создаем WebAPI……………………………………………………………………………………………………………… 492

17.3. Теория Web API………………………………………………………………………………………………………………. 496

17.4. Сессии………………………………………………………………………………………………………………………………. 498

17.5. Полный цикл……………………………………………………………………………………………………………………. 500

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

Список литературы………………………………………………………………………………. 505

Приложение. Описание электронного архива, сопровождающего книгу 507

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

 

Фленов Михаил

Флёнов Михаил, профессиональный программист. Работал в журнале «Хакер», в котором несколько лет вел рубрики «Hack-FAQ» и «Кодинг» для программистов, печатался в журналах «Игромания» и «Chip-Россия». Автор бестселлеров «Библия Delphi», «Программирование в Delphi глазами хакера», «Программирование на C++ глазами хакера», «Компьютер глазами хакера» и др. Некоторые книги переведены на иностранные языки и изданы в США, Канаде, Польше и других странах.

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

Долгожданная книга “Реализация полезных алгоритмов на C++”

Реализация полезных алгоритмов на C++

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

Книгу можно использовать как справочник по алгоритмам для программистов и исследователей и как учебное пособие для студентов соответствующих специальностей. Также будет полезна при подготовке к собеседованиям.

Желаю, чтобы мое желание не исполнилось.
 Дуглас Хофштадтер

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

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

и другим.

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

Каждая глава будет для вас небольшим открытием. Например, разобраны малоизученные практические аспекты выпуклой оптимизации, метода Монте-Карло и кластеризации при проектировании и усилении нейронных сетей. Затронуты вопросы  командной разработки алгоритмов.

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

Книгу “Реализация полезных алгоритмов на C++” можно купить со скидкой в интернет-магазине издательства “БХВ“.

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

  1. С чего всё начинается………………………………………………………………………… 21

1.1. Введение………………………………………………………………………………………………………………………………. 21

1.2. Каким должен быть алгоритм?………………………………………………………………………………………….. 21

1.3. Логика принятия решений………………………………………………………………………………………………….. 23

1.4. Доказательство базовой правильности…………………………………………………………………………….. 25

1.5. Асимптотическая запись…………………………………………………………………………………………………….. 27

1.6. Машинные модели……………………………………………………………………………………………………………… 27

1.7. Рандомизированные алгоритмы………………………………………………………………………………………… 29

1.8. Измерение эффективности………………………………………………………………………………………………….. 29

1.9. Типы данных……………………………………………………………………………………………………………………….. 30

1.10. Эксперименты с алгоритмами…………………………………………………………………………………………. 32

1.11. Управление памятью………………………………………………………………………………………………………… 33

1.12. Оптимизация кода…………………………………………………………………………………………………………….. 34

1.13. Рекурсия…………………………………………………………………………………………………………………………….. 36

1.14. Стратегии вычислений……………………………………………………………………………………………………… 37

1.15. Выбор среди нескольких алгоритмов……………………………………………………………………………… 37

1.16. Создание параллельных алгоритмов……………………………………………………………………………… 38

1.17. Реализация алгоритмов……………………………………………………………………………………………………. 39

1.18. Рекомендуемые курсы для студентов, изучающих информатику………………………………… 40

1.19. Некоторые стратегии обучения………………………………………………………………………………………. 42

1.20. О проектах всей книги………………………………………………………………………………………………………. 43

1.21. Список рекомендуемой литературы……………………………………………………………………………….. 44

  1. Основы разработки программного обеспечения…………………………………. 45

2.1. Введение………………………………………………………………………………………………………………………………. 45

2.2. Обзор цикла разработки…………………………………………………………………………………………………….. 45

2.3. Требования………………………………………………………………………………………………………………………….. 46

2.4. Проектирование структуры компонентов………………………………………………………………………… 47

2.5. Проектирование отдельных компонентов и написание кода…………………………………………. 47

2.6. Шаблоны……………………………………………………………………………………………………………………………… 48

2.7. Управление ошибками……………………………………………………………………………………………………….. 52

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

2.9. Просмотр кода…………………………………………………………………………………………………………………….. 56

2.10. Релиз…………………………………………………………………………………………………………………………………… 56

2.11. Обслуживание…………………………………………………………………………………………………………………… 57

2.12. Оценка………………………………………………………………………………………………………………………………… 58

2.13. Следование формальному процессу……………………………………………………………………………….. 58

2.14. Управление данными пользователя………………………………………………………………………………… 59

2.15. Список рекомендуемой литературы……………………………………………………………………………….. 59

  1. Советы по вопросам карьерного роста ипрохождения собеседований.. 60

3.1. Введение………………………………………………………………………………………………………………………………. 60

3.2. Отклик на вакансию……………………………………………………………………………………………………………. 60

3.3. Составление резюме…………………………………………………………………………………………………………… 60

3.4. Поведенческие вопросы и собеседования………………………………………………………………………… 61

3.5. Технические собеседования………………………………………………………………………………………………. 63

3.6. Более сложные вопросы…………………………………………………………………………………………………….. 67

3.7. Собеседование по проектированию систем……………………………………………………………………… 68

3.8. Обсуждение предложения………………………………………………………………………………………………….. 68

3.9. Как красиво уйти с текущей работы?……………………………………………………………………………….. 69

3.10. Боритесь с самуспокоенностью………………………………………………………………………………………. 69

3.11. Советы по дополнительной подготовке………………………………………………………………………….. 70

3.12. Список рекомендуемой литературы……………………………………………………………………………….. 70

  1. Основы компьютерного права……………………………………………………………. 71

4.1. Введение………………………………………………………………………………………………………………………………. 71

4.2. Интеллектуальная собственность……………………………………………………………………………………… 71

4.3. Патенты……………………………………………………………………………………………………………………………….. 72

4.4. Коммерческие тайны………………………………………………………………………………………………………….. 73

4.5. Авторские права………………………………………………………………………………………………………………….. 74

4.6. Товарные знаки…………………………………………………………………………………………………………………… 75

4.7. Управление интеллектуальной собственностью……………………………………………………………… 76

4.8. Контракты……………………………………………………………………………………………………………………………. 76

4.9. Лицензии………………………………………………………………………………………………………………………………. 77

4.10. Трудовые соглашения………………………………………………………………………………………………………. 78

4.11. Конфиденциальность……………………………………………………………………………………………………….. 79

4.12. Киберпреступления………………………………………………………………………………………………………….. 80

4.13. Выступления в качестве свидетеля-эксперта…………………………………………………………………. 80

4.14. Советы по дополнительной подготовке………………………………………………………………………….. 81

4.15. Список рекомендуемой литературы……………………………………………………………………………….. 81

  1. Фундаментальные структуры данных………………………………………………… 82

5.1. Введение………………………………………………………………………………………………………………………………. 82

5.2. Вспомогательные функции………………………………………………………………………………………………… 82

5.3. Вектор………………………………………………………………………………………………………………………………….. 88

5.4. Блочный массив………………………………………………………………………………………………………………….. 92

5.5. Связанный список……………………………………………………………………………………………………………….. 93

5.6. Свободный список со сборкой мусора……………………………………………………………………………… 97

5.7. Стек…………………………………………………………………………………………………………………………………….. 101

5.8. Очередь………………………………………………………………………………………………………………………………. 102

5.9. Деревья………………………………………………………………………………………………………………………………. 105

5.10. Битовые алгоритмы………………………………………………………………………………………………………… 106

5.11. Набор битов…………………………………………………………………………………………………………………….. 109

5.12. Поиск объединения…………………………………………………………………………………………………………. 115

5.13. Примечания по реализации……………………………………………………………………………………………. 116

5.14. Комментарии…………………………………………………………………………………………………………………… 116

5.15. Советы по дополнительной подготовке……………………………………………………………………….. 117

5.16. Список рекомендуемой литературы……………………………………………………………………………… 117

  1. Генерация случайных чисел……………………………………………………………… 118

6.1. Введение…………………………………………………………………………………………………………………………….. 118

6.2. Краткий обзор теории вероятностей………………………………………………………………………………. 118

6.3. Генерация псевдослучайных чисел………………………………………………………………………………… 120

6.4. Класс генераторов псевдослучайных чисел Xorshift……………………………………………………. 122

6.5. Вихрь Мерсенна……………………………………………………………………………………………………………….. 123

6.6. Генератор MRG32k3a………………………………………………………………………………………………………. 123

6.7. Алгоритм RC4……………………………………………………………………………………………………………………. 125

6.8. Выбор генератора…………………………………………………………………………………………………………….. 126

6.9. Использование генератора………………………………………………………………………………………………. 127

6.10. Создание выборок из распределений……………………………………………………………………………. 127

6.11. Генерация выборок из дискретных распределений с ограниченным диапазоном…… 129

6.12. Генерация выборок из особых распределений……………………………………………………………. 133

6.13. Генерация случайных объектов……………………………………………………………………………………. 137

6.14. Генерация выборок из многомерных распределений………………………………………………….. 139

6.15. Метод Монте-Карло………………………………………………………………………………………………………. 140

6.16. Примечания по реализации……………………………………………………………………………………………. 146

6.17. Комментарии…………………………………………………………………………………………………………………… 147

6.18. Советы по дополнительной подготовке……………………………………………………………………….. 147

6.19. Список рекомендуемой литературы……………………………………………………………………………… 148

  1. Сортировка………………………………………………………………………………………. 149

7.1. Введение…………………………………………………………………………………………………………………………….. 149

7.2. Сортировка вставками……………………………………………………………………………………………………… 149

7.3. Быстрая сортировка…………………………………………………………………………………………………………. 150

7.4. Сортировка слиянием……………………………………………………………………………………………………….. 153

7.5. Целочисленная сортировка……………………………………………………………………………………………… 154

7.6. Векторная сортировка……………………………………………………………………………………………………… 155

7.7. Сортировка перестановкой……………………………………………………………………………………………… 158

7.8. Выбор…………………………………………………………………………………………………………………………………. 159

7.9. Множественный выбор…………………………………………………………………………………………………….. 160

7.10. Поиск………………………………………………………………………………………………………………………………… 161

7.11. Примечания по реализации……………………………………………………………………………………………. 161

7.12. Комментарии…………………………………………………………………………………………………………………… 162

7.13. Советы по дополнительной подготовке……………………………………………………………………….. 163

7.14. Список рекомендуемой литературы……………………………………………………………………………… 163

  1. Динамически сортируемые последовательности……………………………….. 164

8.1. Введение…………………………………………………………………………………………………………………………….. 164

8.2. Требования………………………………………………………………………………………………………………………… 164

8.3. Список с пропусками………………………………………………………………………………………………………… 165

8.4. Декартово дерево……………………………………………………………………………………………………………… 170

8.5. Итераторы деревьев………………………………………………………………………………………………………….. 176

8.6. Дополнения и варианты API……………………………………………………………………………………………. 178

8.7. Векторные ключи……………………………………………………………………………………………………………… 179

8.8. Расширение LCP для деревьев…………………………………………………………………………………………. 179

8.9. Префиксное дерево……………………………………………………………………………………………………………. 185

8.10. Тернарное декартово дерево…………………………………………………………………………………………. 186

8.11. Сравнение производительности……………………………………………………………………………………. 191

8.12. Примечания по реализации……………………………………………………………………………………………. 192

8.13. Комментарии…………………………………………………………………………………………………………………… 192

8.14. Советы по дополнительной подготовке……………………………………………………………………….. 194

8.15. Список рекомендуемой литературы……………………………………………………………………………… 194

  1. Хеширование……………………………………………………………………………………. 196

9.1. Введение…………………………………………………………………………………………………………………………….. 196

9.2. Хеш-функции……………………………………………………………………………………………………………………… 196

9.3. Универсальные хеш-функции………………………………………………………………………………………….. 200

9.4. Неуниверсальные хеш-функции………………………………………………………………………………………. 203

9.5. Скользящие хеш-функции………………………………………………………………………………………………… 205

9.6. Коллекция хеш-функций…………………………………………………………………………………………………… 206

9.7. Хеш-таблицы…………………………………………………………………………………………………………………….. 206

9.8. Цепочка хеш-таблиц…………………………………………………………………………………………………………. 206

9.9. Хеш-таблица с линейным зондированием……………………………………………………………………… 211

9.10. Оценка времени……………………………………………………………………………………………………………….. 215

9.11. Фильтр Блума………………………………………………………………………………………………………………….. 216

9.12. Примечания по реализации……………………………………………………………………………………………. 217

9.13. Комментарии…………………………………………………………………………………………………………………… 218

9.14. Советы по дополнительной подготовке……………………………………………………………………….. 219

9.15. Список рекомендуемой литературы……………………………………………………………………………… 219

  1. Приоритетные очереди……………………………………………………………………. 221

10.1. Введение………………………………………………………………………………………………………………………….. 221

10.2. API……………………………………………………………………………………………………………………………………. 221

10.3. Бинарная куча…………………………………………………………………………………………………………………. 221

10.4. Индексированные кучи…………………………………………………………………………………………………… 224

10.5. Примечания по реализации……………………………………………………………………………………………. 229

10.6. Комментарии…………………………………………………………………………………………………………………… 229

10.7. Список рекомендуемой литературы……………………………………………………………………………… 230

  1. Алгоритмы графов………………………………………………………………………….. 231

11.1. Введение………………………………………………………………………………………………………………………….. 231

11.2. Основы……………………………………………………………………………………………………………………………… 231

11.3. Представление графов……………………………………………………………………………………………………. 232

11.4. Поиск………………………………………………………………………………………………………………………………… 235

11.5. Примеры задач поиска…………………………………………………………………………………………………… 237

11.6. Минимальное остовное дерево……………………………………………………………………………………… 239

11.7. Кратчайшие пути……………………………………………………………………………………………………………. 240

11.8. Алгоритмы потока………………………………………………………………………………………………………….. 243

11.9. Двудольное сопоставление……………………………………………………………………………………………. 247

11.10. Устойчивое сопоставление………………………………………………………………………………………….. 248

11.11. Задача назначения……………………………………………………………………………………………………….. 249

11.12. Генерация случайных графов……………………………………………………………………………………… 250

11.13. Примечания по реализации…………………………………………………………………………………………. 251

11.14. Комментарии…………………………………………………………………………………………………………………. 251

11.15. Советы по дополнительной подготовке……………………………………………………………………… 252

11.16. Список рекомендуемой литературы…………………………………………………………………………… 252

  1. Разные алгоритмы и методы…………………………………………………………… 253

12.1. Введение………………………………………………………………………………………………………………………….. 253

12.2. Превращение статических структур данных в динамические……………………………………. 253

12.3. Обеспечение устойчивости структур данных……………………………………………………………… 254

12.4. Хранение кеша………………………………………………………………………………………………………………… 255

12.5. Вектор с k-битным размером слова………………………………………………………………………………. 258

12.6. Объединение множества на интервалах………………………………………………………………………. 259

12.7. Создание первых N простых чисел……………………………………………………………………………….. 259

12.8. Генерация всех возможных перестановок……………………………………………………………………. 260

12.9. Генерация всех возможных сочетаний…………………………………………………………………………. 261

12.10. Генерация всех подмножеств………………………………………………………………………………………. 262

12.11. Создание всех разделов……………………………………………………………………………………………….. 262

12.12. Генерация всех зависимых объектов………………………………………………………………………….. 263

12.13. Примечания по реализации…………………………………………………………………………………………. 263

12.14. Комментарии…………………………………………………………………………………………………………………. 263

12.15. Советы по дополнительной подготовке……………………………………………………………………… 264

12.16. Список рекомендуемой литературы…………………………………………………………………………… 264

  1. Алгоритмы для работы с внешней памятью……………………………………. 265

13.1. Введение………………………………………………………………………………………………………………………….. 265

13.2. Диски и файлы…………………………………………………………………………………………………………………. 265

13.3. Структура файла…………………………………………………………………………………………………………….. 268

13.4. Работа с файлами CSV…………………………………………………………………………………………………… 269

13.5. Модель ввода/вывода…………………………………………………………………………………………………….. 273

13.6. Вектор внешней памяти………………………………………………………………………………………………….. 277

13.7. Сортировка……………………………………………………………………………………………………………………… 280

13.8. Векторные структуры данных………………………………………………………………………………………. 282

13.9. Дерево B+………………………………………………………………………………………………………………………… 283

13.10. Комментарии…………………………………………………………………………………………………………………. 291

13.11. Советы по дополнительной подготовке……………………………………………………………………… 291

13.12. Список рекомендуемой литературы…………………………………………………………………………… 292

  1. Строковые алгоритмы…………………………………………………………………….. 293

14.1. Введение………………………………………………………………………………………………………………………….. 293

14.2. Поиск по одному шаблону…………………………………………………………………………………………….. 293

14.3. Поиск по нескольким шаблонам……………………………………………………………………………………. 296

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

14.5. Расширенные шаблоны………………………………………………………………………………………………….. 299

14.6. Алгоритмы поиска расстояния между строками…………………………………………………………. 301

14.7. Обратный индекс…………………………………………………………………………………………………………….. 305

14.8. Суффиксный индекс………………………………………………………………………………………………………… 306

14.9. Синтаксическое дерево………………………………………………………………………………………………….. 310

14.10. Введение в краткие структуры данных………………………………………………………………………. 310

14.11. Примечания по реализации…………………………………………………………………………………………. 314

14.12. Комментарии…………………………………………………………………………………………………………………. 315

14.13. Советы по дополнительной подготовке……………………………………………………………………… 315

14.14. Список рекомендуемой литературы…………………………………………………………………………… 316

  1. Сжатие……………………………………………………………………………………………. 317

15.1. Введение………………………………………………………………………………………………………………………….. 317

15.2. Основные ограничения…………………………………………………………………………………………………… 317

15.3. Энтропия………………………………………………………………………………………………………………………….. 317

15.4. Битовый поток…………………………………………………………………………………………………………………. 318

15.5. Коды…………………………………………………………………………………………………………………………………. 320

15.6. Статические коды…………………………………………………………………………………………………………… 320

15.7. Коды Хаффмана……………………………………………………………………………………………………………… 324

15.8. Сжатие словаря………………………………………………………………………………………………………………. 328

15.9. Кодирование серий байтов……………………………………………………………………………………………. 331

15.10. Перемещение на передний план………………………………………………………………………………….. 332

15.11. Преобразование Берроуза — Уилера…………………………………………………………………………. 333

15.12. Примечания по реализации…………………………………………………………………………………………. 336

15.13. Комментарии…………………………………………………………………………………………………………………. 336

15.14. Советы по дополнительной подготовке……………………………………………………………………… 337

15.15. Список рекомендуемой литературы…………………………………………………………………………… 337

  1. Комбинаторная оптимизация………………………………………………………….. 338

16.1. Введение………………………………………………………………………………………………………………………….. 338

16.2. Теория сложности…………………………………………………………………………………………………………… 338

16.3. Типичные сложные задачи…………………………………………………………………………………………….. 340

16.4. Алгоритмы приближения……………………………………………………………………………………………….. 344

16.5. Эвристика жадного построения…………………………………………………………………………………….. 345

16.6. Ветвление и границы………………………………………………………………………………………………………. 346

16.7. Поиск крачайшего пути в пространстве с нижними границами…………………………………. 352

16.8. Локальный поиск…………………………………………………………………………………………………………….. 360

16.9. Применение локального поиска к некоторым задачам……………………………………………….. 366

16.10. Алгоритм имитации отжига…………………………………………………………………………………………. 370

16.11. Повторный локальный поиск………………………………………………………………………………………. 375

16.12. Генетические алгоритмы……………………………………………………………………………………………… 377

16.13. Анализ производительности………………………………………………………………………………………… 383

16.14. Подготовка данных для конкретной задачи………………………………………………………………. 384

16.15. Многоцелевая оптимизация…………………………………………………………………………………………. 384

16.16. Обработка ограничений………………………………………………………………………………………………. 385

16.17. Стохастические задачи………………………………………………………………………………………………… 390

16.18. Общие рекомендации……………………………………………………………………………………………………. 390

16.19. Примечания по реализации…………………………………………………………………………………………. 391

16.20. Комментарии…………………………………………………………………………………………………………………. 391

16.21. Советы по дополнительной подготовке……………………………………………………………………… 394

16.22. Список рекомендуемой литературы…………………………………………………………………………… 395

  1. Большие числа………………………………………………………………………………… 397

17.1. Введение………………………………………………………………………………………………………………………….. 397

17.2. Представление………………………………………………………………………………………………………………… 397

17.3. Сложение и вычитание…………………………………………………………………………………………………… 399

17.4. Операции сдвига……………………………………………………………………………………………………………… 400

17.5. Умножение………………………………………………………………………………………………………………………. 401

17.6. Деление……………………………………………………………………………………………………………………………. 402

17.7. Преобразование в десятичное число…………………………………………………………………………….. 404

17.8. Возведение в степень………………………………………………………………………………………………………. 404

17.9. Вычисление логарифма………………………………………………………………………………………………….. 405

17.10. Целочисленный квадратный корень…………………………………………………………………………… 405

17.11. Наибольший общий делитель……………………………………………………………………………………… 406

17.12. Модульная инверсия…………………………………………………………………………………………………….. 406

17.13. Проверка числа на простоту……………………………………………………………………………………….. 407

17.14. Рациональные числа…………………………………………………………………………………………………….. 408

17.15. Примечания по реализации…………………………………………………………………………………………. 410

17.16. Комментарии…………………………………………………………………………………………………………………. 410

17.17. Советы по дополнительной подготовке……………………………………………………………………… 411

17.18. Список рекомендуемой литературы…………………………………………………………………………… 411

  1. Вычислительная геометрия…………………………………………………………….. 412

18.1. Введение………………………………………………………………………………………………………………………….. 412

18.2. Расстояния……………………………………………………………………………………………………………………….. 412

18.3. VP-дерево…………………………………………………………………………………………………………………………. 413

18.4. k-d-дерево………………………………………………………………………………………………………………………… 417

18.5. Решение задач при большом числе измерений…………………………………………………………….. 422

18.6. Структуры данных для геометрических объектов………………………………………………………. 423

18.7. Точки………………………………………………………………………………………………………………………………… 423

18.8. Геометрические примитивы…………………………………………………………………………………………… 424

18.9. Выпуклая оболочка………………………………………………………………………………………………………… 425

18.10. Развертка плоскости…………………………………………………………………………………………………….. 426

18.11. Комментарии…………………………………………………………………………………………………………………. 427

18.12. Советы по дополнительной подготовке……………………………………………………………………… 428

18.13. Список рекомендуемой литературы…………………………………………………………………………… 428

  1. Обнаружение и исправление ошибок……………………………………………… 429

19.1. Введение………………………………………………………………………………………………………………………….. 429

19.2. Бинарные полиномы………………………………………………………………………………………………………. 429

19.3. Многочлены над конечными полями……………………………………………………………………………. 429

19.4. Обнаружение ошибок…………………………………………………………………………………………………….. 430

19.5. Каналы и коды………………………………………………………………………………………………………………… 432

19.6. Вычисление конечного поля………………………………………………………………………………………….. 434

19.7. Полиномы над элементами поля Галуа……………………………………………………………………….. 435

19.8. Коды Рида — Соломона………………………………………………………………………………………………… 438

19.9. Границы кодов минимального расстояния с фиксированным алфавитом………………… 442

19.10. Булевы матрицы……………………………………………………………………………………………………………. 443

19.11. Коды проверки на четность с низкой плотностью…………………………………………………….. 444

19.12. Примечания по реализации…………………………………………………………………………………………. 449

19.13. Комментарии…………………………………………………………………………………………………………………. 450

19.14. Советы по дополнительной подготовке……………………………………………………………………… 451

19.15. Список рекомендуемой литературы…………………………………………………………………………… 451

  1. Криптография…………………………………………………………………………………. 452

20.1. Введение………………………………………………………………………………………………………………………….. 452

20.2. Шифрование файлов………………………………………………………………………………………………………. 452

20.3. Длина ключа……………………………………………………………………………………………………………………. 454

20.4. Хранилище ключей…………………………………………………………………………………………………………. 455

20.5. Криптографическое хеширование………………………………………………………………………………… 456

20.6. Обмен ключами……………………………………………………………………………………………………………….. 456

20.7. Другие протоколы…………………………………………………………………………………………………………… 456

20.8. Примечания по реализации……………………………………………………………………………………………. 457

20.9. Комментарии…………………………………………………………………………………………………………………… 457

20.10. Совет по дополнительной подготовке………………………………………………………………………… 458

20.11. Список рекомендуемой литературы…………………………………………………………………………… 458

  1. Вычислительная статистика…………………………………………………………… 459

21.1. Введение………………………………………………………………………………………………………………………….. 459

21.2. Оценки……………………………………………………………………………………………………………………………… 459

21.3. Оценщики…………………………………………………………………………………………………………………………. 462

21.4. Поиск наиболее эффективных оценщиков……………………………………………………………………. 469

21.5. Некоторые особенности асимптотики………………………………………………………………………….. 473

21.6. Оценка нормальной CDF………………………………………………………………………………………………… 473

21.7. Оценка CDF T-распределения……………………………………………………………………………………….. 474

21.8. Подробнее о доверительных интервалах…………………………………………………………………….. 475

21.9. Границы среднего значения в конечной выборке………………………………………………………… 479

21.10. Доверительные интервалы для общих метрик местоположения……………………………… 481

21.11. Выпадающие значения и надежные выводы……………………………………………………………… 484

21.12. Функции оценок…………………………………………………………………………………………………………….. 486

21.13. Измерение времени выполнения алгоритма……………………………………………………………….. 487

21.14. Корреляционный анализ……………………………………………………………………………………………… 488

21.15. Начальная загрузка……………………………………………………………………………………………………… 490

21.16. Когда использовать начальную загрузку?…………………………………………………………………. 504

21.17. Проверка гипотез………………………………………………………………………………………………………….. 505

21.18. Сравнение тестов………………………………………………………………………………………………………….. 507

21.19. Эффективное использование тестов……………………………………………………………………………. 509

21.20. Валидация исследований…………………………………………………………………………………………….. 514

21.21. Сравнение совпадающих пар……………………………………………………………………………………… 515

21.22. Множественные сравнения………………………………………………………………………………………….. 517

21.23. Сравнение совпадающих кортежей……………………………………………………………………………. 519

21.24. Сравнение независимых выборок……………………………………………………………………………….. 520

21.25. Перестановочные тесты……………………………………………………………………………………………….. 522

21.26. Сравнение нескольких альтернатив в нескольких предметных областях………………. 526

21.27. Работа с данными расчета…………………………………………………………………………………………… 529

21.28. Тестирование различий в распределении………………………………………………………………….. 531

21.29. Сравнение данных с распределением………………………………………………………………………… 532

21.30. Сравнение распределений двух выборок…………………………………………………………………… 534

21.31. Анализ чувствительности…………………………………………………………………………………………….. 535

21.32. Последовательность Соболя……………………………………………………………………………………….. 537

21.33. Планирование экспериментов: основные идеи………………………………………………………….. 541

21.34. Марковская цепь Монте-Карло…………………………………………………………………………………… 544

21.35. Байесовские методы……………………………………………………………………………………………………… 547

21.36. Поиск лучшей альтернативы с помощью моделирования………………………………………… 549

21.37. Расчет размера выборки………………………………………………………………………………………………. 552

21.38. Анализ временных рядов……………………………………………………………………………………………… 553

21.39. Использование статистики на практике……………………………………………………………………… 565

21.40. Анализ решений……………………………………………………………………………………………………………. 567

21.41. Примечания по реализации…………………………………………………………………………………………. 569

21.42. Комментарии…………………………………………………………………………………………………………………. 570

21.43. Советы по дополнительной подготовке……………………………………………………………………… 576

21.44. Список рекомендуемой литературы…………………………………………………………………………… 578

  1. Численные алгоритмы: введение и матричная алгебра…………………… 582

22.1. Введение………………………………………………………………………………………………………………………….. 582

22.2. Арифметика с плавающей точкой…………………………………………………………………………………. 583

22.3. Ошибки при использовании арифметики с плавающей точкой………………………………….. 584

22.4. Ошибка приближения…………………………………………………………………………………………………….. 588

22.5. Показатели устойчивости и состояния…………………………………………………………………………. 589

22.6. Ошибка оптимизации……………………………………………………………………………………………………… 591

22.7. Другие общие темы…………………………………………………………………………………………………………. 593

22.8. Разработка надежного численного программного обеспечения……………………………….. 595

22.9. Матричная алгебра………………………………………………………………………………………………………… 599

22.10. Матричные нормы………………………………………………………………………………………………………… 602

22.11. LUP-разложение……………………………………………………………………………………………………………. 603

22.12. Разложение Холецкого…………………………………………………………………………………………………. 608

22.13. Ленточные матрицы……………………………………………………………………………………………………… 609

22.14. Решение тридиагональных матричных уравнений…………………………………………………… 611

22.15. Ортогональные преобразования…………………………………………………………………………………. 611

22.16. QR-разложение……………………………………………………………………………………………………………… 613

22.17. Собственные значения и собственные векторы симметричной матрицы……………….. 615

22.18. Разложение по сингулярным значениям (SVD)………………………………………………………….. 618

22.19. Собственные значения и собственные векторы асимметричной матрицы……………… 622

22.20. Разреженные матрицы………………………………………………………………………………………………….. 627

22.21. Итерационные методы для разреженных матриц……………………………………………………… 633

22.22. Итерационные методы для собственных значений…………………………………………………… 634

22.23. Введение в интервальную арифметику………………………………………………………………………. 636

22.24. Примечания по реализации…………………………………………………………………………………………. 639

22.25. Комментарии…………………………………………………………………………………………………………………. 639

22.26. Советы по дополнительной подготовке……………………………………………………………………… 642

22.27. Список рекомендуемой литературы…………………………………………………………………………… 642

  1. Численные алгоритмы: работа с функциями………………………………….. 645

23.1. Введение………………………………………………………………………………………………………………………….. 645

23.2. Быстрое преобразование Фурье……………………………………………………………………………………. 645

23.3. Интерполяция: общие идеи……………………………………………………………………………………………. 649

23.4. Полиномиальная интерполяция из существующих данных……………………………………….. 652

23.5. Полиномы Чебышева……………………………………………………………………………………………………… 655

23.6. Кусочная интерполяция…………………………………………………………………………………………………. 662

23.7. Сплайны — для работы с существующими данными…………………………………………………. 668

23.8. Сравнение методов интерполяции………………………………………………………………………………… 672

23.9. Интегрирование………………………………………………………………………………………………………………. 674

23.10. Многомерное интегрирование…………………………………………………………………………………….. 681

23.11. Оценка функции…………………………………………………………………………………………………………….. 685

23.12. Оценка производных…………………………………………………………………………………………………….. 685

23.13. Решение нелинейных уравнений и систем………………………………………………………………….. 691

23.14. Поиск всех корней в одномерном случае……………………………………………………………………. 707

23.15. Обыкновенные дифференциальные уравнения………………………………………………………….. 708

23.16. Решение жестких ОДУ………………………………………………………………………………………………….. 713

23.17. Краевые задачи для ОДУ…………………………………………………………………………………………….. 717

23.18. Уравнения с частными производными: некоторые размышления…………………………… 719

23.19. Некоторые выводы……………………………………………………………………………………………………….. 720

23.20. Примечания по реализации…………………………………………………………………………………………. 721

23.21. Комментарии…………………………………………………………………………………………………………………. 721

23.22. Советы по дополнительной подготовке……………………………………………………………………… 727

23.23. Список рекомендуемой литературы…………………………………………………………………………… 728

  1. Численная оптимизация…………………………………………………………………. 731

24.1. Введение………………………………………………………………………………………………………………………….. 731

24.2. Некоторые общие идеи…………………………………………………………………………………………………… 731

24.3. Минимизация унимодальной функции с одной переменной………………………………………. 732

24.4. Минимизация многомерных функций: введение и координатный спуск…………………… 735

24.5. Линейный поиск………………………………………………………………………………………………………………. 738

24.6. Алгоритмы линейного поиска……………………………………………………………………………………….. 742

24.7. Методы, не требующие вычисления производных……………………………………………………… 748

24.8. Негладкая минимизация…………………………………………………………………………………………………. 753

24.9. Глобальная минимизация………………………………………………………………………………………………. 756

24.10. Оптимизация в дискретном множестве……………………………………………………………………….. 770

24.11. Стохастическая оптимизация……………………………………………………………………………………… 772

24.12. Алгоритмы стохастической аппроксимации……………………………………………………………… 773

24.13. Линейное программирование………………………………………………………………………………………. 776

24.14. Некоторые соображения о нелинейном программировании……………………………………. 779

24.15. Примечания по реализации…………………………………………………………………………………………. 780

24.16. Комментарии…………………………………………………………………………………………………………………. 781

24.17. Советы по дополнительной подготовке……………………………………………………………………… 786

24.18. Список рекомендуемой литературы…………………………………………………………………………… 787

  1. Введение в машинное обучение………………………………………………………. 790

25.1. Введение………………………………………………………………………………………………………………………….. 790

25.2. Что такое машинное обучение?…………………………………………………………………………………….. 790

25.3. Математическое обучение…………………………………………………………………………………………….. 791

25.4. Прогнозирование и структурный вывод……………………………………………………………………….. 796

25.5. Оценка риска предиктора………………………………………………………………………………………………. 796

25.6. Источники риска……………………………………………………………………………………………………………… 799

25.7. Контроль сложности………………………………………………………………………………………………………. 800

25.8. Ошибка аппроксимации…………………………………………………………………………………………………. 802

25.9. Устойчивость…………………………………………………………………………………………………………………… 805

25.10. Оценка риска стратегии обучения………………………………………………………………………………. 806

25.11. Принятие решений и выбор модели…………………………………………………………………………….. 810

25.12. Общие стратегии выбора модели………………………………………………………………………………… 812

25.13. Смещение, дисперсия и бэггинг…………………………………………………………………………………… 813

25.14. Паттерны проектирования…………………………………………………………………………………………… 816

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

25.16. Масштабирование………………………………………………………………………………………………………… 819

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

25.18. Выбор признаков………………………………………………………………………………………………………….. 821

25.19. Ядра……………………………………………………………………………………………………………………………….. 827

25.20. Обучение в реальном времени…………………………………………………………………………………….. 829

25.21. Работа с невекторными данными………………………………………………………………………………… 830

25.22. Масштабное обучение…………………………………………………………………………………………………. 830

25.23. Выводы………………………………………………………………………………………………………………………….. 832

25.24. Примечания по реализации…………………………………………………………………………………………. 833

25.25. Комментарии…………………………………………………………………………………………………………………. 833

25.26. Советы по дополнительной подготовке……………………………………………………………………… 839

25.27. Список рекомендуемой литературы…………………………………………………………………………… 840

  1. Машинное обучение: классификация…………………………………………….. 842

26.1. Введение………………………………………………………………………………………………………………………….. 842

26.2. Стратификация по метке класса……………………………………………………………………………………. 842

26.3. Оценка риска…………………………………………………………………………………………………………………… 844

26.4. Сведение мультикласса к двум классам……………………………………………………………………….. 848

26.5. Контроль сложности………………………………………………………………………………………………………. 851

26.6. Наивный классификатор Байеса…………………………………………………………………………………… 853

26.7. Ближайший сосед……………………………………………………………………………………………………………. 856

26.8. Дерево решений………………………………………………………………………………………………………………. 859

26.9. Механизм опорных векторов…………………………………………………………………………………………. 866

26.10. Линейный SVM……………………………………………………………………………………………………………… 868

26.11. Ядро SVM………………………………………………………………………………………………………………………. 873

26.12. Мультиклассовый нелинейный SVM………………………………………………………………………….. 878

26.13. Нейронная сеть……………………………………………………………………………………………………………… 880

26.14. Ансамбли рандомизации……………………………………………………………………………………………… 889

26.15. Обучение в реальном времени…………………………………………………………………………………….. 891

26.16. Бустинг…………………………………………………………………………………………………………………………… 894

26.17. Масштабное обучение…………………………………………………………………………………………………. 898

26.18. Экономичное обучение………………………………………………………………………………………………… 898

26.19. Несбалансированное обучение…………………………………………………………………………………… 903

26.20. Выбор признаков………………………………………………………………………………………………………….. 906

26.21. Сравнение классификаторов……………………………………………………………………………………….. 906

26.22. Примечания по реализации…………………………………………………………………………………………. 909

26.23. Комментарии…………………………………………………………………………………………………………………. 910

26.24. Советы по дополнительной подготовке……………………………………………………………………… 919

26.25. Список рекомендуемой литературы…………………………………………………………………………… 919

  1. Машинное обучение: регрессия………………………………………………………. 922

27.1. Введение………………………………………………………………………………………………………………………….. 922

27.2. Оценка риска…………………………………………………………………………………………………………………… 922

27.3. Управление сложностью………………………………………………………………………………………………… 924

27.4. Линейная регрессия………………………………………………………………………………………………………… 925

27.5. Регрессия лассо……………………………………………………………………………………………………………….. 926

27.6. Регрессия ближайших соседей………………………………………………………………………………………. 930

27.7. Дерево регрессии…………………………………………………………………………………………………………….. 931

27.8. Регрессия случайного леса…………………………………………………………………………………………….. 934

27.9. Нейронная сеть……………………………………………………………………………………………………………….. 935

27.10. Выбор признаков………………………………………………………………………………………………………….. 936

27.11. Сравнение производительности………………………………………………………………………………….. 936

27.12. Примечания по реализации…………………………………………………………………………………………. 937

27.13. Комментарии…………………………………………………………………………………………………………………. 938

27.14. Советы по дополнительной подготовке……………………………………………………………………… 941

27.15. Список рекомендуемой литературы…………………………………………………………………………… 942

  1. Машинное обучение: кластеризация………………………………………………. 943

28.1. Введение………………………………………………………………………………………………………………………….. 943

28.2. Постановка………………………………………………………………………………………………………………………. 943

28.3. Внешняя оценка………………………………………………………………………………………………………………. 945

28.4. Внутренняя оценка и выбор количества кластеров…………………………………………………….. 948

28.5. Расчет устойчивости………………………………………………………………………………………………………. 951

28.6. Кластеризация в евклидовом пространстве…………………………………………………………………. 953

28.7. Кластеризация в метрическом пространстве……………………………………………………………….. 957

28.8. Спектральная кластеризация………………………………………………………………………………………… 960

28.9. Эксперименты…………………………………………………………………………………………………………………. 964

28.10. Примечания по реализации…………………………………………………………………………………………. 964

28.11. Комментарии…………………………………………………………………………………………………………………. 965

28.12. Советы по дополнительной подготовке……………………………………………………………………… 969

28.13. Список рекомендуемой литературы…………………………………………………………………………… 969

  1. Машинное обучение: прочие задачи……………………………………………….. 971

29.1. Введение………………………………………………………………………………………………………………………….. 971

29.2. Обучение с подкреплением……………………………………………………………………………………………. 971

29.3. Функция, присваивающая значения……………………………………………………………………………… 972

29.4. Поиск часто встречающихся комбинаций предметов…………………………………………………. 974

29.5. Полуконтролируемое обучение…………………………………………………………………………………….. 975

29.6. Оценка плотности…………………………………………………………………………………………………………… 976

29.7. Обнаружение выпадающих значений…………………………………………………………………………… 976

29.8. Примечания по реализации……………………………………………………………………………………………. 977

29.9. Комментарии…………………………………………………………………………………………………………………… 977

29.10. Список рекомендуемой литературы…………………………………………………………………………… 978

  1. Отстойник: не слишком полезные алгоритмы и структуры данных.. 979

30.1. Введение………………………………………………………………………………………………………………………….. 979

30.2. Сортировка связанного списка……………………………………………………………………………………… 979

30.3. Частичная сортировка……………………………………………………………………………………………………. 981

30.4. Сжатое префиксное дерево……………………………………………………………………………………………. 981

30.5. Хеширование кукушкой…………………………………………………………………………………………………. 987

30.6. Немного приоритетных очередей…………………………………………………………………………………. 990

30.7. Младший общий предок (LCA) и запрос с минимальным диапазоном (RQM)…………. 996

30.8. Знаковый ранговый критерий Уилкоксона для двух выборок……………………………………. 997

30.9. Критерий Фридмана для согласованных выборок……………………………………………………… 998

30.10. MADS-подобный алгоритм оптимизации…………………………………………………………………… 999

30.11. Алгоритм классификации бустинга SAMME…………………………………………………………… 1000

30.12. Бустинг в задаче регрессии……………………………………………………………………………………….. 1001

30.13. Вероятностная кластеризация…………………………………………………………………………………… 1003

30.14. Иерархическая кластеризация………………………………………………………………………………….. 1007

30.15. Кластеризация на основе плотности………………………………………………………………………… 1010

30.16. Не представленные реализации………………………………………………………………………………… 1012

30.17. Советы по дополнительной подготовке……………………………………………………………………. 1013

30.18. Список рекомендуемой литературы…………………………………………………………………………. 1014

  1. Приложение: примечания о языке С++…………………………………………. 1015

31.1. Введение………………………………………………………………………………………………………………………… 1015

31.2. Путеводитель по литературе, посвященной C++……………………………………………………….. 1015

31.3. Советы по дополнительной подготовке……………………………………………………………………… 1015

31.4. Список рекомендуемой литературы…………………………………………………………………………… 1016

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