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

Новинка: “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++ глазами хакера», «Компьютер глазами хакера» и др. Некоторые книги переведены на иностранные языки и изданы в США, Канаде, Польше и других странах.

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

Новинка: “WebAssembly. Практическое руководство”

WebAssembly. Практическое руководств

Базовая книга о технологии WebAssembly, позволяющей писать браузерный код на многих распространённых языках программирования и интегрировать этот код с JavaScript. В книге избран проектный подход и рассказано, как при помощи библиотек и функций WebAssembly переносить и переиспользовать в веб-приложениях код на C++, Rust и языках для платформы .NET. Рассмотрено, как создавать децентрализованные приложения и средства для периферийных вычислений с повышенными требованиями к безопасности, производительности и интероперабельности при работе в браузере.  Особое внимание уделено библиотеке Tensorflow.js, поддерживающей глубокое обучение в браузере на основе пользовательских запросов.

Для веб-разработчиков и исследователей языков программирования

Животное на обложке — это норвич-терьер. Эти бесстрашные, активные и ласковые собачки были популярны среди студентов Кембриджского университета в 1870-х годах, которые держали их в общежитиях в качестве домашних животных. В США норвичи добились успеха в охоте как на грызунов, так и на лис, поскольку их небольшой размер позволял забираться в узкие норы, в которые гончие залезть не могли.

The Definitive Guide

Эффективный кроссплатформенный код

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

Предлагается поступательное введение в технологию: в рамках книги разобрано несколько постепенно усложняющихся примеров, в которых вы научитесь при помощи WebAssembly внедрять в браузер код C++, Rust, .NET, интегрировать в веб-приложение библиотеку машинного обучения Tensorflow.js. Изложенный материал будет полезен при разработке встраиваемых систем, в научных вычислениях, при создании стартапов и повышении производительности и интероперабельности имеющихся продуктов.

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

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

Предисловие…………………………………………………………………………………………….. 9

Условные обозначения, используемые в этой книге………………………………………………………………. 10

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

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

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

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

Глава 1. Знакомство с WebAssembly……………………………………………………….. 15

Что WebAssembly может вам предложить……………………………………………………………………………….. 15

История развития веба………………………………………………………………………………………………………………. 18

Истоки JavaScript……………………………………………………………………………………………………………………….. 19

Эволюция веб-платформ…………………………………………………………………………………………………………… 21

Native Client (NaCl)…………………………………………………………………………………………………………………….. 24

asm.js…………………………………………………………………………………………………………………………………………… 26

Появление WebAssembly…………………………………………………………………………………………………………… 28

Глава 2. Нечто вроде “Hello, World”………………………………………………………. 31

Текстовый формат WebAssembly — Wat (WebAssembly Text Format)………………………………….. 32

Преобразование Wat в Wasm……………………………………………………………………………………………………. 36

Выполнение Wasm в Repl………………………………………………………………………………………………………….. 38

Выполнение WebAssembly в браузере…………………………………………………………………………………….. 39

Глава 3. Модули в WebAssembly…………………………………………………………….. 43

Структура модуля……………………………………………………………………………………………………………………… 44

Изучение секций модуля……………………………………………………………………………………………………………. 46

Работа с модулями…………………………………………………………………………………………………………………….. 49

Будущая интеграция с модулями ES6……………………………………………………………………………………… 55

Глава 4. Память в WebAssembly……………………………………………………………… 57

Типизированные массивы…………………………………………………………………………………………………………. 58

Объекты Memory в WebAssembly……………………………………………………………………………………………… 62

Использование Memory API в WebAssembly……………………………………………………………………………. 65

И напоследок строки…………………………………………………………………………………………………………………. 70

Глава 5. Совместное использование C++ и WebAssembly……………………….. 77

Функции в C………………………………………………………………………………………………………………………………… 78

Всё усложняется………………………………………………………………………………………………………………………… 87

C/C++ и Webassembly………………………………………………………………………………………………………………… 95

Наконец-то “Hello, World!” на WebAssembly…………………………………………………………………………. 101

Глава 6. Применение WebAssembly: традиционный код под браузером.. 105

Программа “Hello, World!” — теперь настоящая…………………………………………………………………… 106

Перенос стороннего кода………………………………………………………………………………………………………… 111

Проект libsodium………………………………………………………………………………………………………………………. 125

Глава 7. Таблицы в WebAssembly…………………………………………………………. 127

Статическое и динамическое связывание……………………………………………………………………………… 127

Создание объектов Table в модулях………………………………………………………………………………………. 132

Динамическое связывание в WebAssembly……………………………………………………………………………. 135

Глава 8. WebAssembly в серверных приложениях…………………………………. 139

Нативные расширения для Node.js………………………………………………………………………………………… 140

WebAssembly и Node.js……………………………………………………………………………………………………………. 144

“Атака на цепочку поставок”………………………………………………………………………………………………….. 147

WebAssembly и Deno……………………………………………………………………………………………………………….. 148

Взгляд в будущее……………………………………………………………………………………………………………………… 152

Глава 9. WebAssembly за работой: TensorFlow.js…………………………………… 155

Аппаратная платформа…………………………………………………………………………………………………………… 156

Playground…………………………………………………………………………………………………………………………………. 157

TensorFlow.js…………………………………………………………………………………………………………………………….. 158

Серверный модуль на WebAssembly……………………………………………………………………………………… 161

Глава 10. Rust………………………………………………………………………………………. 165

Введение в Rust………………………………………………………………………………………………………………………… 166

Rust и WebAssembly…………………………………………………………………………………………………………………. 171

wasm-bindgen……………………………………………………………………………………………………………………………. 175

Разработка кода для входа и выхода из браузера……………………………………………………………….. 182

Глава 11. Системный интерфейс WebAssembly (WASI)…………………………. 189

Системный интерфейс WebAssembly (WASI)………………………………………………………………………… 189

Безопасность на основе возможностей………………………………………………………………………………….. 198

Полная картина WebAssembly……………………………………………………………………………………………….. 202

Глава 12. Расширение платформы WebAssembly………………………………….. 207

Время выполнения WASI………………………………………………………………………………………………………… 208

Множественные возвращаемые значения……………………………………………………………………………… 212

Ссылочные типы……………………………………………………………………………………………………………………… 214

Связывание модулей……………………………………………………………………………………………………………….. 218

Тестирование функций……………………………………………………………………………………………………………. 223

Другие предложения……………………………………………………………………………………………………………….. 226

Глава 13. WebAssembly и .NET……………………………………………………………… 229

.NET и Wasmtime……………………………………………………………………………………………………………………… 230

Blazor………………………………………………………………………………………………………………………………………… 234

Платформа Uno………………………………………………………………………………………………………………………… 245

Глава 14. Использование AssemblyScript и WebAssembly………………………. 251

“Вовсе не компилятор TypeScript для WebAssembly”…………………………………………………………… 253

Простой пример……………………………………………………………………………………………………………………….. 255

Сборка “мусора” и среда выполнения AssemblyScript…………………………………………………………. 260

Стандартная библиотека ассемблера…………………………………………………………………………………… 261

Загрузчик AssemblyScript………………………………………………………………………………………………………… 262

Глава 15. Прикладной WebAssembly: в облаке и на границах………………. 267

Кратко о моем опыте работы…………………………………………………………………………………………………. 267

Наша отрасль развивается……………………………………………………………………………………………………… 269

Fastly Compute@Edge……………………………………………………………………………………………………………… 274

Krustlet………………………………………………………………………………………………………………………………………. 276

Suborbital…………………………………………………………………………………………………………………………………… 277

WasmEdge…………………………………………………………………………………………………………………………………. 279

wasmCloud………………………………………………………………………………………………………………………………… 282

Глава 16. Прикладной WebAssembly: децентрализованные приложения 287

Централизация против децентрализации……………………………………………………………………………… 287

От Bitcoin к Ethereum……………………………………………………………………………………………………………….. 289

Как вы решаете проблему, подобную проблеме остановки?………………………………………………. 291

ewasm………………………………………………………………………………………………………………………………………… 293

Polkadot…………………………………………………………………………………………………………………………………….. 295

InterPlanetary File System (IPFS)……………………………………………………………………………………………… 296

Глава 17. WebAssembly и другие языки программирования…………………. 305

TinyGo……………………………………………………………………………………………………………………………………….. 305

Artichoke……………………………………………………………………………………………………………………………………. 311

Swift…………………………………………………………………………………………………………………………………………… 312

Java……………………………………………………………………………………………………………………………………………. 315

Kotlin…………………………………………………………………………………………………………………………………………. 318

Zig………………………………………………………………………………………………………………………………………………. 318

Grain………………………………………………………………………………………………………………………………………….. 322

И что теперь?……………………………………………………………………………………………………………………………. 323

Приложение. Установка инструментов WebAssembly…………………………… 325

Установка WebAssembly Binary Toolkit (WABT)………………………………………………………………….. 325

Установка LLVM……………………………………………………………………………………………………………………… 325

Установка Emscripten………………………………………………………………………………………………………………. 326

Установка Wasm3……………………………………………………………………………………………………………………. 326

Установка Wasmtime………………………………………………………………………………………………………………. 327

Установка Wasmer…………………………………………………………………………………………………………………… 327

Установка инструментов Rust………………………………………………………………………………………………… 327

Установка инструментов .NET……………………………………………………………………………………………….. 328

Установка AssemblyScript……………………………………………………………………………………………………….. 329

Установка IPFS………………………………………………………………………………………………………………………… 329

Установка TinyGo……………………………………………………………………………………………………………………. 329

Установка Artichoke………………………………………………………………………………………………………………… 329

Установка SwiftWasm……………………………………………………………………………………………………………… 329

Установка Zig и Grain………………………………………………………………………………………………………………. 330

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

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

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

Brian Sletten

Брайан Слеттен (Brian Sletten) – широко эрудированный программист. Разрабатывал приложения для розничной торговли, банковской сферы, издательского дела, онлайн-игр, оборонной сферы, финансов, гостиничного бизнеса и здравоохранения. За годы работы научился сочетать надёжные решения нетривиальных задач с внедрением самых передовых технологий. Именно поэтому он высоко оценивает потенциал WebAssembly.

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

Встречайте: “Контролируемый взлом. Библия социальной инженерии”

Контролируемый взлом. Библия социальной инженерии

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

Для специалистов по информационной безопасности

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

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

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

В книге вы найдете:

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

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

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

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

От автора………………………………………………………………………………………………………………………………… 9

Кому и как можно использовать эту книгу?………………………………………………………………………. 11

Для представителей служб ИБ, СБ и ИТ-служб………………………………………………………… 13

Для пентестеров…………………………………………………………………………………………………………… 13

Для хакеров………………………………………………………………………………………………………………….. 14

Что такое социальная инженерия?……………………………………………………………………………………… 14

Опасность социальной инженерии…………………………………………………………………………………….. 15

Цитаты………………………………………………………………………………………………………………………….. 15

Ущерб от СИ…………………………………………………………………………………………………………………. 16

Глава 1. Онлайн-атаки………………………………………………………………………. 21

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

Пентестеру……………………………………………………………………………………………………………………. 22

OSINT для СИ………………………………………………………………………………………………………. 22

Разведка боем………………………………………………………………………………………………………. 23

Проверка антиспама…………………………………………………………………………………………… 26

Переходим на личности……………………………………………………………………………………… 26

Какую фишинговую форму создавать?…………………………………………………………….. 27

Несуществующий адрес…………………………………………………………………………….. 27

Пробиваем MX-записи……………………………………………………………………………….. 28

Неведение…………………………………………………………………………………………………….. 28

От чьего имени писать?………………………………………………………………………………………. 29

BEC-атака……………………………………………………………………………………………………. 30

Таблица персонализации…………………………………………………………………………… 31

Пример email-MITM……………………………………………………………………………………. 32

Какой фишинговый домен купить?……………………………………………………………………. 33

Безопаснику………………………………………………………………………………………………………………….. 33

Готовим атаки………………………………………………………………………………………………………………………. 33

Атаки по email………………………………………………………………………………………………………………. 34

Идеи по составлению темы письма……………………………………………………………………. 34

Какую подпись и оформление использовать?………………………………………………….. 35

Выбираем контекст……………………………………………………………………………………………… 35

Векторы и сценарии……………………………………………………………………………………………. 36

Контекст: событийные атаки (Event attacks)……………………………………………………. 36

Событийные атаки: чрезвычайная ситуация…………………………………………… 36

Событийные атаки: праздники………………………………………………………………….. 37

Событийные атаки: политика……………………………………………………………………. 37

Контекст: причина………………………………………………………………………………………………. 38

Якобы взлом………………………………………………………………………………………………… 38

Внеплановая проверка от СРО………………………………………………………………….. 39

Неудачные попытки авторизации…………………………………………………………….. 40

Уведомление………………………………………………………………………………………………… 40

Что вы делаете в Бразилии?……………………………………………………………………….. 41

Контекст: запросы………………………………………………………………………………………………. 41

Контекст: вопросы………………………………………………………………………………………………. 41

Вопрос с вложением……………………………………………………………………………………. 41

А что это вы мне отправили?……………………………………………………………………… 42

Контекст: отправка……………………………………………………………………………………………… 42

Контекст: изменения……………………………………………………………………………………………. 42

Контекст: желание………………………………………………………………………………………………. 43

Контекст: «непонятки»………………………………………………………………………………………… 43

Переписка-ссылка……………………………………………………………………………………….. 43

Одинокий файл……………………………………………………………………………………………. 44

Усиление контекста…………………………………………………………………………………………….. 44

Усиление контекста: эмоции……………………………………………………………………… 44

Усиление контекста: давление…………………………………………………………………… 46

Письма от госорганов…………………………………………………………………………………. 46

Срочно обновитесь……………………………………………………………………………………… 47

Усиление контекста: ложь………………………………………………………………………….. 47

Фейковая переписка……………………………………………………………………………………. 48

Фейковая пересылка…………………………………………………………………………………… 48

Усиление контекста: совпадение………………………………………………………………. 49

Источники фишинговых писем…………………………………………………………………………… 49

Файлы……………………………………………………………………………………………………………………………. 50

Некорректное отображение……………………………………………………………………………….. 50

Подарочный сертификат…………………………………………………………………………………….. 50

Пустой файл…………………………………………………………………………………………………………. 51

Документ с «мыльцой»………………………………………………………………………………………… 53

Имитация Excel-таблицы в Word-документе…………………………………………………….. 57

Небезопасный PDF-файл…………………………………………………………………………………….. 57

Файл как прокладка перед нагрузкой……………………………………………………………….. 59

Отсутствующий сертификат………………………………………………………………………………. 61

Разрешите и заполните……………………………………………………………………………………….. 62

Файл ICS………………………………………………………………………………………………………………. 63

Социальные сети………………………………………………………………………………………………………….. 64

Подготовка…………………………………………………………………………………………………………… 65

О поиске сотрудников в соцсетях………………………………………………………………………. 69

Клонирование аккаунтов……………………………………………………………………………………. 70

Медленно, но верно…………………………………………………………………………………………….. 70

Многоходовка в соцсети…………………………………………………………………………………….. 70

Терпеливо ждем…………………………………………………………………………………………………… 71

Мессенджеры……………………………………………………………………………………………………………….. 71

Telegram-каналы………………………………………………………………………………………………….. 72

Сотрудник — физлицо………………………………………………………………………………………… 72

Онлайн-консультанты…………………………………………………………………………………………………. 73

Веб-сайты……………………………………………………………………………………………………………………… 73

Поддельное окно для ввода логина и пароля…………………………………………………… 74

Скачайте на нашем сайте…………………………………………………………………………………… 74

Корпоративные порталы……………………………………………………………………………………. 74

Разрешите уточнить……………………………………………………………………………………………. 75

Новостные ресурсы…………………………………………………………………………………………….. 75

Туда, да не туда…………………………………………………………………………………………………… 76

Фейковая капча и предупреждение о cookie…………………………………………………….. 76

Всплывающее окно……………………………………………………………………………………………… 77

Персонализированный сайт……………………………………………………………………………….. 79

Покажи себя…………………………………………………………………………………………………………. 80

Реклама…………………………………………………………………………………………………………………………. 81

Таргет по MAC-адресу……………………………………………………………………………………….. 81

Таргет по геолокации………………………………………………………………………………………….. 82

Адвёртинг…………………………………………………………………………………………………………….. 82

Фиктивный APK-файл…………………………………………………………………………………………. 83

Лидеры мнений…………………………………………………………………………………………………………….. 83

Видео-deepfake…………………………………………………………………………………………………………….. 83

Видео без видео……………………………………………………………………………………………………………. 84

Аудио-deepfake……………………………………………………………………………………………………………. 84

«Find trap» сценарии…………………………………………………………………………………………………….. 85

Find trap с помощью рекомендаций…………………………………………………………………… 86

Выдуманная компания……………………………………………………………………………………….. 87

Find trap с помощью звонков………………………………………………………………………………. 87

Продажа фиктивного сертификата……………………………………………………………………. 87

Комментарии………………………………………………………………………………………………………………… 87

Легализованная СИ……………………………………………………………………………………………………… 88

Отправили к вам………………………………………………………………………………………………….. 89

Фишинг………………………………………………………………………………………………………………………….. 90

Проверка на утечку…………………………………………………………………………………………….. 90

Data-phishing………………………………………………………………………………………………………… 90

Многоходовки………………………………………………………………………………………………………………. 91

Фейковое интервью……………………………………………………………………………………………………… 93

Цепочки писем……………………………………………………………………………………………………………… 93

Цепочки писем: неправильная кодировка как повод……………………………………….. 93

Цепочки писем: простите, не туда……………………………………………………………………… 94

Цепочки писем: нас взломали…………………………………………………………………………….. 94

Цепочки писем: использование для data-фишинга…………………………………………… 94

Глава 2. Технологические трюки введения в заблуждение………………… 95

Маскировка ссылок……………………………………………………………………………………………………………… 95

Символ @……………………………………………………………………………………………………………………… 95

Слеш в Unicode…………………………………………………………………………………………………………….. 96

Домены в Punycode………………………………………………………………………………………………………. 96

Зашумление юникодом……………………………………………………………………………………………….. 96

Обфускация ссылок……………………………………………………………………………………………………… 96

QR-коды………………………………………………………………………………………………………………………… 97

Некорректный протокол……………………………………………………………………………………………… 97

Ссылки в виде картинок………………………………………………………………………………………………. 98

Ссылка в документах…………………………………………………………………………………………………… 99

Очень длинная ссылка…………………………………………………………………………………………………. 99

Ссылка виде цифр………………………………………………………………………………………………………. 100

Невидимая при наведении мыши……………………………………………………………………………… 100

Редиректы…………………………………………………………………………………………………………………… 100

Неактивные ссылки……………………………………………………………………………………………………. 102

Похожие на официальные…………………………………………………………………………………………. 103

Ссылки в поддоменах………………………………………………………………………………………………… 103

Сращивание с поддоменом……………………………………………………………………………………….. 104

Сращивание с протоколом……………………………………………………………………………………….. 104

Домен после слеша……………………………………………………………………………………………………. 104

В дополнение……………………………………………………………………………………………………………… 104

Капча от ботов защитного ПО…………………………………………………………………………. 104

Одноразовые ссылки…………………………………………………………………………………………. 105

Подделка отправителя………………………………………………………………………………………………………. 105

Email с официального ресурса………………………………………………………………………………………….. 106

Вложения и файлы……………………………………………………………………………………………………………… 107

Файлы Microsoft Office……………………………………………………………………………………………… 107

Рушим шаблоны поведения через печать………………………………………………………………… 108

PDF-файлы………………………………………………………………………………………………………………….. 109

HTML-файлы……………………………………………………………………………………………………………… 110

Маскировка расширения html…………………………………………………………………………………… 111

Архивы с паролем……………………………………………………………………………………………………… 112

Архивы без пароля…………………………………………………………………………………………………….. 112

Редко используемые форматы архивов……………………………………………………………………. 113

Онлайн-документы…………………………………………………………………………………………………………….. 113

Excel-файл, размещенный онлайн……………………………………………………………………………. 113

Глава 3. Атаки в офлайне………………………………………………………………… 117

Проникновение на физические объекты…………………………………………………………………………… 117

Предмет в руках…………………………………………………………………………………………………………. 117

Подслушанная легенда……………………………………………………………………………………………… 118

Проведение интервью………………………………………………………………………………………………… 119

Давайте помогу………………………………………………………………………………………………………….. 119

Корпоративная столовая………………………………………………………………………………………….. 119

Небезопасные парковки……………………………………………………………………………………………. 120

Паровозик…………………………………………………………………………………………………………………… 120

Мусорный дайвинг…………………………………………………………………………………………………….. 120

Отделение банка………………………………………………………………………………………………………… 121

Отвлекающий маневр………………………………………………………………………………………………… 121

Потенциальный клиент……………………………………………………………………………………………… 122

Собеседование…………………………………………………………………………………………………………… 122

Гостевой пропуск………………………………………………………………………………………………………. 122

Подделка карты-пропуска………………………………………………………………………………………… 122

Черный ход…………………………………………………………………………………………………………………. 122

Плечевая атака…………………………………………………………………………………………………………………… 123

USB-устройства………………………………………………………………………………………………………………….. 123

Таргетированная флешка………………………………………………………………………………………….. 123

Флешка с легендой…………………………………………………………………………………………………….. 123

«За букет роз»…………………………………………………………………………………………………………….. 124

Juice jacking………………………………………………………………………………………………………………… 124

Смишинг……………………………………………………………………………………………………………………………… 125

Вишинг………………………………………………………………………………………………………………………………… 126

Подделка номера……………………………………………………………………………………………………….. 126

Многоходовый звонок……………………………………………………………………………………………….. 126

Вернитесь на работу…………………………………………………………………………………………………. 126

Забыл кодовое слово…………………………………………………………………………………………………. 127

Отсылка к отпускнику……………………………………………………………………………………………….. 127

Синхронный ввод………………………………………………………………………………………………………. 127

Телефон + find trap…………………………………………………………………………………………………….. 127

Любой добавочный……………………………………………………………………………………………………. 128

Китовые атаки……………………………………………………………………………………………………………. 128

Усиление звонком………………………………………………………………………………………………………. 129

Квид про кво……………………………………………………………………………………………………………….. 129

Callback phishing………………………………………………………………………………………………………… 130

Бумага не во благо…………………………………………………………………………………………………………….. 131

Подбрасывание корпоративных документов………………………………………………………….. 131

Визуальный пропуск…………………………………………………………………………………………………. 131

Реклама на бумаге……………………………………………………………………………………………………… 131

QR-коды на бумажных носителях……………………………………………………………………………. 131

Справка………………………………………………………………………………………………………………………. 132

Общественный транспорт…………………………………………………………………………………………………. 133

Wi-Fi…………………………………………………………………………………………………………………………………….. 133

Мероприятия………………………………………………………………………………………………………………………. 134

Двухдневное мероприятие………………………………………………………………………………………… 134

Организовал себе на голову……………………………………………………………………………………… 134

Конференции, выставки и форумы…………………………………………………………………………… 134

Пришел к одним, пошел к другим…………………………………………………………………………….. 135

Корпоратив………………………………………………………………………………………………………………… 135

Комбинирование………………………………………………………………………………………………………………… 135

Глава 4. Проведение онлайн-атак по email………………………………………. 137

Какой софт использовать?………………………………………………………………………………………………… 137

Список email-пользователей……………………………………………………………………………………………… 138

Как создавать сообщения для атак?………………………………………………………………………………… 138

Чек-лист применения электронной СИ…………………………………………………………………………….. 140

Как повысить киберграмотность сотрудников?……………………………………………………………… 140

Технические аспекты обучения………………………………………………………………………………………… 142

Глава 5. Технические меры противодействия СИ…………………………….. 145

Софт…………………………………………………………………………………………………………………………………….. 145

Корпоративный браузер…………………………………………………………………………………………… 145

Сегментация сети и Zero Trust…………………………………………………………………………………… 146

Невозможность залогиниться в почте с недоверенных IP-адресов………………………. 146

Обнаружение повторного использования пароля………………………………………………….. 146

Фиды о фишинге…………………………………………………………………………………………………………. 146

Антифишинговый шрифт…………………………………………………………………………………………… 147

Настройка DKIM, SPF и DMARC……………………………………………………………………………… 148

Предотвращение выполнения исходного кода……………………………………………………….. 149

Sandbox………………………………………………………………………………………………………………………. 150

Hardware……………………………………………………………………………………………………………………………… 150

Межсетевые экраны…………………………………………………………………………………………………… 150

FIDO…………………………………………………………………………………………………………………………….. 151

Различия между UAF, U2F и FIDO2…………………………………………………………………. 152

Недостатки этого способа защиты………………………………………………………………….. 153

OTP-токены…………………………………………………………………………………………………………………. 153

Глава 6. Организационные меры…………………………………………………….. 155

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

Одобрение процесса повышения осведомленности у руководителей………………….. 157

Обучение: памятки, курсы, форматы обучения………………………………………………………. 158

Регламенты…………………………………………………………………………………………………………………. 159

Регламент обучения персонала……………………………………………………………………….. 160

Некоторые аспекты для учета в регламентах………………………………………………… 160

Контроль реквизитов………………………………………………………………………………………… 161

Дополнительная проверка перед оплатой……………………………………………………… 161

Как вести себя с гостями?…………………………………………………………………………………. 161

Общение с коллегами………………………………………………………………………………………… 162

72 минуты до начала конца……………………………………………………………………………… 162

Сотни регламентов по информационной безопасности………………………………… 162

Послесловие…………………………………………………………………………………….. 165

Приложение 1. Генератор онлайн-СИ………………………………………………. 167

Приложение 2. Классификатор СИ…………………………………………………… 169

Электронная социальная инженерия v0.81……………………………………………………………………… 169

Офлайн социальная инженерия v0.2………………………………………………………………………………… 175

Приложение 3. Таблица персонализации…………………………………………. 177

Приложение 4. Бесплатное в помощь службе ИБ и ИТ…………………….. 179

Приложение 5. Критерии выбора платформы по повышению осведомленности   181

Приложение 6. Словарь терминов……………………………………………………. 187

Юрий Другач

Другач Юрий Станиславович— участник программ Bug Bounty, находил уязвимости в PayPal, Google, Яндекс, Mail.ru. Автор статей в журнале «Хакер», на порталах SecurityLab, «Хабр», а также создатель и автор блога о социальной инженерии stopphish.ru. Сооснователь компании по обучению киберграмотности S

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

Новинка: “Обработка данных на Python. Data Wrangling и Data Quality”

Обработка данных на Python. Data Wrangling и Data Quality

Книга посвящена первичной обработке данных (Data Wrangling) на Python  и  оценке их качества (Data Quality). Материал содержит основополагающие концепции, экспертные советы и  ресурсы, необходимые для первичной обработки, извлечения, оценки и анализа данных. Все темы раскрыты на простых и наглядных примерах из практики. Даны необходимые и достаточные сведения о языке программирования  Python 3.8+ для чтения, записи и преобразования данных из различных источников, а также  для обработки данных в больших масштабах. Приведены лучшие практики  документирования и структурирования кода. Описан сбор данных из файлов, веб-страниц и API. Рассмотрены приемы проведения базового статистического анализа наборов данных, а также наглядные и убедительные способы визуализации и представления  данных. Изложение рассчитано как на новичков по обработке данных, так и на профессионалов. Электронный архив на сайте издательства содержит цветные иллюстрации к книге.

Для специалистов по обработке данных

Начните работу с чтения, очистки и анализа данных

Мир вокруг нас полон данных, которые содержат уникальные и ценные сведения, но полезную информацию из этих «сырых» данных нужно уметь извлечь!

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

В этой книге ярко проявляется опыт Сьюзан Макгрегор в преподавании журналистики данных (data journalism) студентам всех уровней. Она приводит примеры из реальной жизни и объясняет, как подходить к поиску, проверке и анализу данных доступным способом.
 Джоанна С. Као , технический руководитель журналистики данных в газете Файнэншл Таймс

  • Применяйте Python 3.8+ для чтения, записи и преобразования данных из различных источников, а также для обработки данных в больших масштабах.
  • Организуйте, документируйте и структурируйте свой код, используя лучшие практики
  • Собирайте данные из файлов, веб-страниц и API
  • Проводите базовый статистический анализ, чтобы осмыслить наборы данных
  • Визуализируйте и представляйте данные наглядным и убедительным образом

Книгу “Обработка данных на Python. Data Wrangling и Data Quality” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Введение. 11

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

Поедете сами или возьмете такси?. 12

Кому не следует читать эту книгу?. 13

Что ожидать от этой книги. 13

Типографские соглашения. 14

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

Цветные иллюстрации. 16

Возможности онлайнового обучения от компании O’Reilly. 16

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

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

ГЛАВА 1. Введение в первичную обработку (выпас) и качество данных. 19

Что такое выпас данных?. 20

Что такое качество данных?. 22

Целостность данных. 23

Соответствие данных. 23

Почему мы выбрали Python?. 25

Универсальность. 25

Доступность. 25

Удобочитаемость. 26

Сообщество. 26

Альтернативы языку Python. 27

Написание и исполнение программ на языке Python. 27

Работа с кодом Python на локальном устройстве. 30

Введение в работу с командной строкой. 30

Установка языка Python, среды Jupyter Notebook и редактора кода. 33

Работа с кодом Python в режиме онлайн. 39

Hello World! 39

Создание файла автономного сценария Python при помощи Atom.. 39

Создание блокнота кода Python в Jupyter Notebook. 41

Создание блокнота кода Python в Google Colab. 42

Создаем программу. 43

В файле автономного сценария. 43

В блокноте. 43

Исполняем программу. 43

В файле автономного сценария. 43

В блокноте. 44

Документирование, сохранение и управление версиями своего кода. 44

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

Сохранение. 46

Управление версиями. 46

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

ГЛАВА 2. Введение в Python. 57

“Части речи” языков программирования. 58

Существительные ≈ переменные. 59

Важно ли конкретное имя?. 61

Наилучшие практики для именования переменных. 62

Глаголы ≈ функциям. 62

Применение пользовательских функций. 67

Библиотеки: занимаем пользовательские функции у других программистов. 68

Структуры управления: циклы и условные операторы. 69

Циклы. 69

Условные операторы. 72

Понимание ошибок. 77

Синтаксические ошибки. 78

Ошибки времени исполнения. 79

Логические ошибки. 83

Отправляемся в путь с данными Citi Bike. 85

Начинаем с создания псевдокода. 86

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

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

ГЛАВА 3. Понимание качества данных. 95

Оценка соответствия данных. 97

Достоверность данных. 98

Надежность данных. 100

Репрезентативность данных. 101

Оценка целостности данных. 104

Необходимые, но недостаточные. 106

Важные. 108

Достижимость. 111

Улучшение качества данных. 114

Очистка данных. 115

Аугментация данных. 115

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

ГЛАВА 4. Работа с файловыми и канальными данными
на языке Python. 117

Структурированные и неструктурированные данные. 119

Работа со структурированными данными. 123

Файловые табличные форматы данных. 124

Выпас табличных данных посредством языка Python. 126

Выпас реальных данных: понимание безработицы. 133

XLSX, ODS и все остальные. 136

Данные фиксированной ширины. 143

Канальные данные — интерактивные обновления через Интернет. 147

Выпас канальных данных средствами языка Python. 150

Формат JSON: данные следующего поколения. 160

Работа с неструктурированными данными. 165

Текст на основе изображений: доступ к данным в формате PDF. 165

Выпас PDF-данных, используя Python. 166

Обращение к таблицам PDF посредством Tabula. 171

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

ГЛАВА 5. Доступ к интернет-данным.. 173

Доступ к веб-данным XML и JSON.. 175

Знакомство с API-интерфейсами. 178

Базовые API-интерфейсы на примере поисковой системы. 179

Специализированные API-интерфейсы: добавление простой
аутентификации. 181

Получение ключа для API-интерфейса FRED.. 181

Использование ключа API для запроса данных. 182

Чтение документации по API-интерфейсу. 183

Защита своего ключа API при использовании сценариев Python. 186

Создание файла учетных данных. 188

Использование учетных данных в отдельном сценарии. 189

Основы работы с файлом .gitignore. 190

Специализированные API-интерфейсы: работа с протоколом OAuth. 193

Получение учетной записи разработчика Twitter 194

Создание приложения и учетных данных Twitter 196

Кодирование ключа API и ключа секрета API 201

Запрос токена доступа и данных из API-интерфейса Twitter 202

Этические нормы при работе с API-интерфейсами. 206

Извлечение веб-данных: источник данных последней надежды. 207

Осторожно извлекаем данные с веб-сайта УГПТ. 210

Использование средств инспектирования браузера. 211

Решение Python для извлечения данных из веб-страницы:
библиотека Beautiful Soup. 214

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

ГЛАВА 6. Оценка качества данных. 219

Пандемия и программа PPP. 221

Оценка целостности данных. 222

Имеют ли данные известное происхождение?. 223

Актуальны ли данные?. 223

Полные ли данные?. 224

Хорошо ли данные аннотированы?. 236

Являются ли данные крупномасштабными?. 242

Непротиворечивы ли данные?. 244

Многомерны ли наши данные?. 248

Атомарны ли данные?. 250

Понятны ли данные?. 250

Размерностно структурированы ли данные?. 252

Оценка соответствия данных. 253

Достоверность данных. 253

Надежность данных. 257

Репрезентативность данных. 258

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

ГЛАВА 7. Очистка, преобразование и дополнение данных. 261

Выбор подмножества данных системы Citi Bike. 262

Простое разбиение. 263

Регулярные выражения: супермощное средство сопоставления строк. 265

Создание дат. 270

Удаление хлама из файлов данных. 272

Декодирование дат Excel 276

Создание настоящих данных CSV из данных фиксированной ширины. 279

Исправление разнообразности написаний. 282

Тернистый путь к “простым” решениям. 288

Опасные подводные камни. 290

Дополнение данных. 292

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

ГЛАВА 8. Структурирование и рефакторинг кода. 296

Обзор пользовательских функций. 296

Многократное использование кода. 297

Аккуратное и понятное документирование. 297

Недостаточная функциональность по умолчанию.. 298

Область видимости. 298

Определение параметров функции. 301

Доступные опции. 302

Предоставление аргументов. 303

Возвращаемые значения. 303

Работа со стеком. 305

Рефакторинг для получения удовольствия и прибыли. 306

Функция для определения рабочих дней. 306

Опрятные метаданные. 309

Использование pydoc для документирования сценариев и пользовательских функций. 317

О полезности аргументов командной строки. 321

Отличия во взаимодействии со сценариями в автономных файлах и блокнотах. 325

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

ГЛАВА 9. Введение в анализ данных. 327

Вся суть — в контексте. 328

Одинаковые, но не совсем. 329

Что типично? Оценка центральной тенденции. 329

Что это значит?. 330

Поразмыслим нестандартно: выявляем выбросы. 332

Визуализация для анализа данных. 332

Какова форма наших данных? Учимся понимать гистограммы. 336

Вопрос за $2 миллиона. 346

Пропорциональный ответ. 359

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

ГЛАВА 10. Представление данных. 364

Основы визуального красноречия. 365

Сформулируйте свои данные. 367

Диаграммы, графики и картограммы — вот это да! 368

Круговые диаграммы. 369

Линейчатые и столбчатые диаграммы. 372

Линейные диаграммы. 377

Диаграмма рассеяния. 380

Картограммы. 383

Элементы красноречивых визуальных эффектов. 386

“Мелкие” детали действительно имеют значение. 386

Доверяйте своим глазам (и экспертам) 387

Выбор масштаба. 388

Выбор цветовой гаммы. 389

Прежде всего делайте аннотации! 389

От базового к красивому: настройка визуализации с помощью seaborn и matplotlib. 390

Выйдите за рамки основ. 395

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

ГЛАВА 11. За пределами Python. 397

Дополнительные инструменты для анализа данных. 398

Программы для работы с электронными таблицами. 398

OpenRefine. 399

Дополнительные инструменты для обмена и представления данных. 402

Редактирование изображений в форматах JPG, PNG и GIF. 402

Программное обеспечение для редактирования SVG и других векторных форматов. 402

Размышления об этике. 404

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

Приложение А. Другие ресурсы по программированию на Python. 406

Официальная документация Python. 406

Установка ресурсов Python. 407

Где искать библиотеки. 407

Следите за остротой своих инструментов. 408

Где получить больше информации. 409

Приложение Б. Еще несколько слов о Git 410

Вы запускаете команду git push/pull и оказываетесь в странном текстовом редакторе. 410

Ваша команда git push/pull отклоняется. 412

Выполните команду git pull 412

Краткое руководство по Git 414

приложение В. Поиск данных. 416

Репозитории данных и API 416

Эксперты по предметным вопросам. 417

Запросы FOIA/L. 418

Кастомные методы сбора данных. 419

приложение Г. Ресурсы для визуализации и информационного дизайна. 421

Основополагающие книги по визуализации информации. 421

Краткое руководство, за которым вы потянетесь. 422

Источники вдохновения. 422

Об авторе. 423

Колофон. 424

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

Susan McGregor

Сьюзен Макгрегор (Susan McGregor) — исследователь Института науки о данных Колумбийского университета. На протяжении более десяти лет она применяет свой успешный подход к преподаванию программирования и анализа данных для студентов нетехнических специальностей.

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

Мировой бестселлер: “Идеальный тестировщик” Кристин Джеквони

Идеальный тестировщик. Концепции, навыки и стратегии высококачественного тестирования

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

Для тестировщиков ПО

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

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

  • Основы тестирования
  • Ручное исследовательское тестирование
  • Тестирование API
  • Создание тест-планов
  • Тестирование баз данных
  • Кроссбраузерное тестирование
  • Тестирование мобильных приложений
  • Разработка стратегий тестирования
  • Тестирование безопасности
  • Тестирование производительности
  • Тестирование юзабилити и доступности
  • Автоматизированное тестирование
  • Управление версиями и работа с Git
  • Работа в команде

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

Введение. 11

Часть I. Почему мы тестируем?. 13

Глава 1. Почему мы тестируем.. 15

Глава 2. Думайте как тестировщик. 17

Глава 3. Почему всегда будут нужны тестировщики программного
обеспечения. 19

Часть II. Ручное тестирование. 21

Глава 4. Тестирование текстового поля. 23

Глава 5. Сломайте свое приложение с помощью одного странного способа. 26

Глава 6. CRUD-тестирование. 28

Глава 7. Тестирование почтовых индексов. 33

Глава 8. Тестирование полей даты.. 35

Глава 9. Тестирование полей телефонных номеров. 37

Глава 10. Тестирование кнопок. 40

Глава 11. Тестирование форм.. 42

Глава 12. Четыре причины, по которым вы должны тестировать проверку
входных данных (даже если это скучно) 45

Глава 13. Три способа протестировать валидацию вывода. 48

Глава 14. Тестирование кнопки Назад. 51

Глава 15. Шесть советов по тестированию загрузки файлов. 53

Глава 16. Тестирование страницы авторизации. 56

Глава 17. Кроссбраузерное тестирование. 59

Глава 18. Перед тем как сообщить о дефекте. 62

Глава 19. Как воспроизвести ошибку. 65

Глава 20. Как зарегистрировать дефект. 69

Часть III. Как работают приложения. 73

Глава 21. Как работают HTTP-запросы.. 75

Глава 22. Маршрутизация в Интернет. 76

Глава 23. Кодирование и шифрование. 78

Глава 24. HTTPS, токены и файлы cookie. 80

Глава 25. Удобный JWT.. 83

Глава 26. Тестирование баз данных. 86

Глава 27. Тестирование реляционных баз данных. 89

Глава 28. Секреты SQL-запросов. 92

Глава 29. Тестирование нереляционных баз данных. 95

Глава 30. Бессерверная архитектура. 98

Часть IV. API-тестирование. 101

Глава 31. Знакомство с REST-запросами. 103

Глава 32. Подготовка к тестированию API. 105

Глава 33. Тестирование запросов GET.. 111

Глава 34. Тестирование запросов POST.. 116

Глава 35. Тестирование запросов PUT.. 120

Глава 36. Тестирование запросов PATCH.. 123

Глава 37. Тестирование запросов DELETE.. 124

Глава 38. Коды ответов. 125

Глава 39. Утверждения Postman. 128

Глава 40. Использование переменных в Postman. 136

Глава 41. Организация API-тестов. 142

Глава 42. Понимание данных JSON.. 145

Глава 43. Простое тестирование API-контрактов. 148

Часть V. Мобильное тестирование. 151

Глава 44. 12 проблем мобильного тестирования. 153

Глава 45. Ручное мобильное тестирование. 158

Глава 46. Семь советов по автоматизированному тестированию мобильных
устройств. 161

Часть VI. Тестирование безопасности. 165

Глава 47. Введение в тестирование безопасности. 167

Глава 48. Использование инструментов разработчика
для поиска уязвимостей в системе безопасности. 169

Глава 49. Тестирование уязвимостей IDOR.. 171

Глава 50. Введение в межсайтовый скриптинг. 173

Глава 51. Три способа проверки на межсайтовый скриптинг. 176

Глава 52. Знакомство с SQL-инъекциями. 180

Глава 53. Знакомство с перехватами сессий. 182

Глава 54. Знакомство с тестированием мобильной безопасности. 185

Часть VII. Тестирование производительности. 187

Глава 55. Введение в тестирование производительности. 189

Глава 56. Как разработать нагрузочный тест. 193

Часть VIII. Тестирование юзабилити и доступности. 197

Глава 57. Тестирование локализации и интернационализации. 199

Глава 58. Тестирование пользовательского опыта. 202

Глава 59. Тестирование доступности. 204

Часть IX. Основы разработки программного обеспечения. 205

Глава 60. Пишите код как разработчик. 207

Глава 61. Основы работы с командной строкой. 209

Глава 62. Основные определения в программировании. 213

Глава 63. Объектно-ориентированное программирование. 215

Глава 64. Передача параметров. 218

Глава 65. Настройка Node. 220

Глава 66. Стрелочные функции. 221

Глава 67. Промисы.. 223

Глава 68. Async/Await 227

Глава 69. Отладка для тестировщиков. 229

Глава 70. Семь шагов к решению любой проблемы кода. 232

Глава 71. Знакомство с Git 235

Глава 72. Шесть советов для успешной работы с Git 239

Глава 73. Разрешение конфликтов слияния. 242

Глава 74. Аккуратное знакомство с регулярными выражениями. 245

Глава 75. Логирование, мониторинг и оповещения. 247

Часть X. Автоматизированное тестирование. 251

Глава 76. Зачем автоматизировать?. 253

Глава 77. Когда автоматизировать?. 255

Глава 78. Переосмысление пирамиды: колесо автоматизации тестирования. 257

Глава 79. Колесо автоматизации тестирования на практике. 261

Глава 80. Юнит-тесты.. 263

Глава 81. Компонентные тесты.. 265

Глава 82. Сервисные тесты.. 268

Глава 83. Какие тесты API запускать и когда их запускать. 273

Глава 84. Настройка тестов пользовательского интерфейса. 276

Глава 85. Понимание DOM… 278

Глава 86. Нахождение веб-элементов. 280

Глава 87. Автоматизация CRUD-тестирования пользовательского интерфейса  284

Глава 88. Автоматизированное тестирование формы.. 287

Глава 89. Автоматизированное визуальное тестирование. 290

Глава 90. Автоматизированное тестирование безопасности. 292

Глава 91. Автоматизация нагрузочных тестов. 294

Глава 92. Автоматизированные тесты доступности. 298

Глава 93. Стратегия колеса автоматизации. Переход от «Что» к «Как»,
«Когда» и «Где». 299

Глава 94. Как нестабильные тесты разрушают доверие. 303

Часть XI. Cтратегия тестирования. 307

Глава 95. Сила незнания. 309

Глава 96. Сила предварительного тестирования. 311

Глава 97. Ваш будущий «я» скажет вам спасибо. 314

Глава 98. Как разработать план тестирования. 316

Глава 99. Организация плана тестирования. 322

Глава 100. Положительные результаты негативного тестирования. 328

Глава 101. Что включать в дымовой тест. 330

Глава 102. Что тестировать, когда на тестирование не хватает времени. 333

Глава 103. Как сделать так, чтобы тест-кейсы не замедляли вашу работу. 337

Глава 104. Запутались? Упрощайте! 343

Глава 105. Шесть шагов для написания эффективного отчета об ошибке. 346

Глава 106. Надо ли охотиться за дефектом?. 352

Глава 107. Почему нужно проводить тестирование в производственной среде?  354

Глава 108. Что делать, если ошибка обнаружена в производственной среде?. 356

Глава 109. Исправить все. 360

Глава 110. Иерархия качества. 363

Глава 111. Измерение качества. 365

Глава 112. Управление данными тестирования. 368

Глава 113. Вопрос времени. 371

Глава 114. Почему дискуссия «ручное тестирование или автоматизации»
ошибочна. 374

Глава 115. Как разрушить замкнутое пространство автоматизации. 377

Глава 116. Хватит писать так много тестов пользовательского интерфейса! 379

Глава 117. Пять причин, по которым вы не готовы к непрерывному
развертыванию.. 382

Часть XII. Гибкие навыки для тестировщиков. 385

Глава 118. Путь к успеху через вопросы.. 387

Глава 119. Семь оправданий, про которые тестировщики должны забыть. 389

Глава 120. Шесть типов тестировщиков, которых следует избегать. 393

Глава 121. Как приручить разработчика. 397

Глава 122. Самоорганизация для успешного тестирования. 399

Глава 123. Тайм-менеджмент для тестировщиков. 402

Глава 124. Как стать заметным.. 407

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

Об авторе. 412

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

Джеквони Кристин

Джеквони Кристин (Kristin Jackvony) — опытный тестировщик и эксперт по обеспечению качества программных продуктов, специализирующийся как на совершенствовании устаревшего программного обеспечения, так и на поддержке нового ПО на самых ранних стадиях разработки. Обладает навыками организации систем и процессов для поддержки всех направлений тестирования. В свободное время ведет авторский блог «Думай как тестировщик» (Think Like a Tester), который можно найти по адресу https://thinkingtester.com.

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

Новинка: “Искусство Agile-тестирования”

Искусство Agile-тестирования

Книга посвящена тестированию программного обеспечения в рамках технологии Agile. Рассматриваются основные аспекты Agile-тестирования: методология, организация, процессы, категории и техники тестирования, инфраструктура, тестовое обеспечение, контроль качества данных. Отдельные главы посвящены психологии Agile-тестирования и особенностям работы тестировщика в Agile-команде.

Для тестировщиков ПО, руководителей проектов

КНИГА ОХВАТЫВАЕТ ВСЕ ОСНОВНЫЕ АСПЕКТЫ AGILE-ТЕСТИРОВАНИЯ

Тестирование — важнейшая часть разработки программного обеспечения, в том числе и с использованием Agile-технологии.

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

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

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

Предисловие…………………………………………………………………………………………….. 9

Введение………………………………………………………………………………………………… 11

Глава 1. Agile-разработка программного обеспечения……………………………. 15

Agile-манифест……………………………………………………………………………………………………………………………. 16

Идеи Agile-манифеста………………………………………………………………………………………………………… 16

Люди и взаимодействие важнее процессов и инструментов…………………………………. 16

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

Сотрудничество с заказчиком важнее согласования условий контракта…………… 20

Готовность к изменениям важнее следования первоначальному плану……………… 20

Основополагающие принципы Agile-манифеста…………………………………………………………….. 21

Суть Agile-разработки……………………………………………………………………………………………………………….. 23

Адаптивность, а не планирование……………………………………………………………………………………. 24

Ориентированность на людей, а не на процесс………………………………………………………………. 25

Концепции Agile………………………………………………………………………………………………………………….. 25

Уровни Agile………………………………………………………………………………………………………………………… 26

Модели разработки программного обеспечения……………………………………………………………………. 28

Традиционное/классическое проектирование………………………………………………………………………… 29

Каскадная модель………………………………………………………………………………………………………………. 29

V-модель……………………………………………………………………………………………………………………………… 31

W-модель…………………………………………………………………………………………………………………………….. 32

Спиральная модель……………………………………………………………………………………………………………. 33

Инкрементальная модель………………………………………………………………………………………………….. 33

Итеративная модель…………………………………………………………………………………………………………… 34

Ведущие методологии Agile-разработки…………………………………………………………………………………. 36

Scrum…………………………………………………………………………………………………………………………………… 37

Scrum-роли………………………………………………………………………………………………………………… 38

Scrum-встречи……………………………………………………………………………………………………………. 40

Scrum-артефакты………………………………………………………………………………………………………. 41

Спринт……………………………………………………………………………………………………………………….. 44

Kanban………………………………………………………………………………………………………………………………… 45

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

Принципы предоставления услуг……………………………………………………………………………. 46

Практические шаги Kanban……………………………………………………………………………………… 47

Дополнительные Agile-фреймворки………………………………………………………………………………….. 48

Экстремальное программирование…………………………………………………………………………. 49

Разработка, управляемая функциональностью……………………………………………………… 50

Адаптивная разработка……………………………………………………………………………………………. 50

Crystal…………………………………………………………………………………………………………………………. 51

Масштабирование Agile……………………………………………………………………………………………………………. 51

Масштабированный Scrum……………………………………………………………………………………………….. 51

Текучая технология масштабирования……………………………………………………………………………. 52

Развернутый Agile-фреймворк…………………………………………………………………………………………… 53

Тестирование в Agile-разработках…………………………………………………………………………………………… 54

Глава 2. Бизнес-кейс: финансовая биржа………………………………………………. 56

Архитектура программного обеспечения биржи……………………………………………………………………. 56

Организация тестирования……………………………………………………………………………………………………….. 62

Тестовые системы и данные……………………………………………………………………………………………… 62

Организация Agile-команд…………………………………………………………………………………………………. 62

Глава 3. Организация…………………………………………………………………………….. 65

Структуры управления……………………………………………………………………………………………………………… 65

Линейно-функциональная структура управления………………………………………………………….. 66

Матричная структура управления…………………………………………………………………………………… 66

Встраивание Agile в структуру управления…………………………………………………………………………….. 67

Глава 4. Процессы…………………………………………………………………………………. 69

Адаптация Agile-процессов……………………………………………………………………………………………………….. 69

Процесс обучения и освоения: Shu-Ha-Ri (сю-ха-ри)…………………………………………………………….. 70

Процесс непрерывного улучшения: Kaizen (кайдзен)…………………………………………………………….. 71

Работа в спринте………………………………………………………………………………………………………………………… 72

Управление релизами………………………………………………………………………………………………………………… 73

Поддержка тестового обеспечения………………………………………………………………………………………….. 74

Проблемы и опасности……………………………………………………………………………………………………………… 75

Глава 5. Структура тестирования…………………………………………………………… 78

Объекты или уровни тестирования………………………………………………………………………………………….. 78

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

Компонентное тестирование…………………………………………………………………………………………….. 80

Интеграционное тестирование…………………………………………………………………………………………. 81

Системное тестирование…………………………………………………………………………………………………… 81

Сквозное тестирование……………………………………………………………………………………………………… 82

Пользовательское тестирование: программный продукт и пользовательские интерфейсы          83

Категории тестирования…………………………………………………………………………………………………………… 83

Функциональное тестирование………………………………………………………………………………………… 84

Тестирование функциональности……………………………………………………………………………. 85

Аттестационное тестирование………………………………………………………………………………… 85

Нефункциональное тестирование…………………………………………………………………………………….. 85

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

Тестирование безопасности…………………………………………………………………………………….. 87

Дополнительные аспекты нефункционального тестирования……………………………… 88

Регрессионное тестирование…………………………………………………………………………………………….. 89

Приемочное тестирование………………………………………………………………………………………………… 90

Дымовое тестирование…………………………………………………………………………………………….. 91

Проверочное тестирование……………………………………………………………………………………… 91

Виды приемочного тестирования……………………………………………………………………………. 91

Техники тестирования……………………………………………………………………………………………………………….. 91

Структурные аспекты тестирования………………………………………………………………………………… 91

Метод черного ящика……………………………………………………………………………………………….. 91

Метод белого ящика…………………………………………………………………………………………………. 92

Метод серого ящика…………………………………………………………………………………………………. 92

Разработка через тестирование………………………………………………………………………………………… 92

Разработка через поведение……………………………………………………………………………………………… 93

Тестирование на основе моделирования…………………………………………………………………………. 94

Тестирование на основе данных………………………………………………………………………………………. 95

Техники формирования тест-кейсов и тестовых данных……………………………………………….. 96

Автоматизированное тестирование…………………………………………………………………………………. 97

Встраивание автоматизированных тестов в разработку продукта…………………….. 98

Некоторые аспекты автоматизированного тестирования…………………………………….. 99

Техники тестирования, основанные на опыте………………………………………………………………. 102

Эксплораторное тестирование……………………………………………………………………………… 102

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

Специальное тестирование……………………………………………………………………………………. 104

Внесение ошибок……………………………………………………………………………………………………………… 105

Мутационное тестирование…………………………………………………………………………………… 106

Модульная интеграция……………………………………………………………………………………………………. 106

Тестирование при интеграции на основе «большого взрыва»……………………………. 106

Инкрементальное тестирование……………………………………………………………………………. 107

Инструменты тестирования…………………………………………………………………………………………….. 107

Глава 6. Инфраструктура……………………………………………………………………… 109

Тестовая среда…………………………………………………………………………………………………………………………. 109

Тестовые данные……………………………………………………………………………………………………………………… 110

Глава 7. Agile-тестирование………………………………………………………………….. 112

Тест-квадранты………………………………………………………………………………………………………………………… 113

Квадрант КТ. Технические тесты, поддерживающие разработчиков………………………… 113

Тестирование модулей…………………………………………………………………………………………… 114

Компонентное тестирование…………………………………………………………………………………. 115

Квадрант КБ. Тесты, поддерживающие разработчиков и ориентированные на бизнес 116

Интеграционное тестирование………………………………………………………………………………. 118

Приемочные тесты для компонентов…………………………………………………………………….. 119

Функциональное тестирование системы………………………………………………………………. 119

Квадрант ПБ. Тесты, ориентированные на бизнес, поддерживающие продукт………… 120

Тестирование пользовательских сценариев…………………………………………………………. 121

Тестирование пригодности и удобства………………………………………………………………… 121

Пользовательское тестирование……………………………………………………………………………. 122

Квадрант ПТ. Технические тесты, поддерживающие продукт……………………………………. 123

Унаследованные системы……………………………………………………………………………………………………….. 124

Глава 8. Тестировщик………………………………………………………………………….. 127

Принципы успешной работы тестировщиков……………………………………………………………………….. 128

Постоянная обратная связь…………………………………………………………………………………………….. 128

Стремление принести пользу заказчику………………………………………………………………………… 129

Непосредственное личное общение……………………………………………………………………………….. 129

Смелость…………………………………………………………………………………………………………………………… 129

Сохранение вещей простыми………………………………………………………………………………………….. 130

Постоянное усовершенствование…………………………………………………………………………………… 130

Восприятие изменений…………………………………………………………………………………………………….. 131

Самоорганизация…………………………………………………………………………………………………………….. 131

Фокус на людях………………………………………………………………………………………………………………… 132

Радость от работы……………………………………………………………………………………………………………. 132

Глава 9. Тестовое обеспечение……………………………………………………………… 133

Планирование тестирования………………………………………………………………………………………………….. 134

Эпики…………………………………………………………………………………………………………………………………. 134

Истории…………………………………………………………………………………………………………………………….. 134

Стратегия тестирования………………………………………………………………………………………………….. 135

План тестирования…………………………………………………………………………………………………………… 138

Тест-спецификации и тест-кейсы……………………………………………………………………………………. 139

Пакеты тестов…………………………………………………………………………………………………………………………… 141

Метрики……………………………………………………………………………………………………………………………………. 142

Контроль над дефектами………………………………………………………………………………………………………… 145

Управление исходным кодом…………………………………………………………………………………………………. 146

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

Глава 10. Качество тестовых данных…………………………………………………… 148

Традиционный подход к оценке качества данных……………………………………………………………….. 148

Внутренняя категория……………………………………………………………………………………………………… 150

Контекстная категория……………………………………………………………………………………………………. 151

Категория представления данных………………………………………………………………………………….. 152

Категория доступа…………………………………………………………………………………………………………… 153

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

Требования к метрике качества данных………………………………………………………………………… 154

Обобщенный детерминант качества тестовых данных……………………………………………….. 156

Коэффициент покрытия тест-кейса……………………………………………………………………….. 157

Вес тест-кейса…………………………………………………………………………………………………………. 157

Глава 11. Психология Agile-тестирования……………………………………………. 160

Психологические вызовы работы в Agile……………………………………………………………………………….. 162

Психологические вызовы Agile-разработки…………………………………………………………………… 163

Психологические вызовы тестировщика……………………………………………………………………….. 163

Роль психологической безопасности……………………………………………………………………………… 165

Agile-команда……………………………………………………………………………………………………………………………. 166

Согласованность и координация в команде………………………………………………………………….. 167

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

Постоянное совершенствование команды…………………………………………………………………….. 169

Психологические стили коллег и как с ними обходиться…………………………………………….. 169

Нарциссический стиль……………………………………………………………………………………………. 171

Добросовестный стиль…………………………………………………………………………………………… 173

Психопатический стиль………………………………………………………………………………………….. 173

Манипулятивный стиль………………………………………………………………………………………….. 174

Драматический стиль……………………………………………………………………………………………… 175

Лживый стиль………………………………………………………………………………………………………….. 175

Бдительный стиль…………………………………………………………………………………………………… 176

Кверулянтный стиль……………………………………………………………………………………………….. 177

Структурный стиль…………………………………………………………………………………………………. 177

Пассивно-агрессивный стиль…………………………………………………………………………………. 177

Активно-агрессивный стиль…………………………………………………………………………………… 178

Доминантный стиль………………………………………………………………………………………………… 178

Привязчивый стиль…………………………………………………………………………………………………. 179

Глава 12. Выживание в «плохих» Agile-проектах…………………………………. 180

Причины проблематичных Agile-проектов……………………………………………………………………………. 180

Слишком формальное следование Agile-процессам……………………………………………………… 180

Нереалистическое планирование в проекте………………………………………………………………….. 182

Плохие рабочие отношения в команде………………………………………………………………………….. 183

Проект не подходит для Agile-разработки…………………………………………………………………….. 183

Имитация Agile-подхода………………………………………………………………………………………………….. 184

Позиционирование в «плохом» проекте………………………………………………………………………………… 184

Простые правила тестировщика…………………………………………………………………………………….. 185

Поддерживать тестовое обеспечение……………………………………………………………………. 185

Тщательно документировать результаты и протоколы тестирования……………… 185

Уделять большое внимание подробной коммуникации со всеми коллегами……. 186

Всегда открывать баг-репорт и фиксировать потенциальную проблему…………. 186

Автоматизировать все, что возможно…………………………………………………………………… 187

Не воспринимать происходящее лично………………………………………………………………… 187

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

Термины и определения……………………………………………………………………….. 191

Библиография………………………………………………………………………………………. 203

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

Чернов Юрий Георгиевич

Чернов Юрий Георгиевич — кандидат технически наук с более чем 40-летним опытом в области разработки и тестирования программного обеспечения. Преподавал в различных университетах в Москве, Цюрихе, Киеве в качестве приглашенного лектора, работал в московских компаниях и израильском хайтеке. Выступал на многочисленных научных конференциях и конгрессах. Последние годы работает в Швейцарии, из них около 20 лет — на Цюрихской финансовой бирже в качестве руководителя группы тестирования и тест-менеджера. В настоящее время руководит собственной консалтинговой фирмой по тестированию программного обеспечения и научному анализу данных.

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

Встречайте: “Дата-ориентированное программирование”

Дата-ориентированное программирование

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

Для аналитиков данных, программистов, руководителей команд и преподавателей

Код, одновременно обрабатывающий и данные, и их поведение (такая ситуация обычна в объектно-ориентированном программировании), порой чрезмерно усложняется, и управлять его состоянием становится практически невозможно. Новая парадигма «дата-ориентированное программирование» (DOP – data-oriented programming) решает эту проблему, поскольку здесь данные приложений содержатся в неизменяемых обобщённых структурах, а вычисления над ними выполняются при помощи обобщённых функций. Парадигма DOP, как и ООП, универсальна и не зависит от конкретного языка. Научитесь работать в таком стиле – и в ваших приложениях больше не будет ошибок, связанных с состоянием, станет легче понимать и поддерживать код.

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

В книге рассказано, как:

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

Книга предназначена для  программистов, имеющих опыт работы с высокоуровневыми языками программирования, в частности, JavaScript, Java, Python, C#, Clojure, Ruby, а также для руководителей и исследователей, решающих широкий спектр задач по обработке данных.

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

Вступительное слово………………………………………………………………………………. 13

Введение………………………………………………………………………………………………… 17

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

Об этой книге……………………………………………………………………………………………………………………………… 19

Кто должен прочитать эту книгу?……………………………………………………………………………………. 19

Как организована эта книга: дорожная карта………………………………………………………………… 19

О коде………………………………………………………………………………………………………………………………….. 21

Дискуссионный форум liveBook……………………………………………………………………………………….. 22

Об авторе……………………………………………………………………………………………………………………………………. 23

Об иллюстрации на обложке……………………………………………………………………………………………………. 23

Персонажи пьесы……………………………………………………………………………………………………………………….. 23

Часть 1. Гибкость……………………………………………………………………………. 25

Глава 1. Сложность объектно-ориентированного программирования……. 27

1.1. Дизайн ООП: классический или традиционный?…………………………………………………………….. 28

1.1.1. Этап проектирования………………………………………………………………………………………………. 28

1.1.2. UML 101……………………………………………………………………………………………………………………. 30

1.1.3. Объяснение каждой части диаграммы классов…………………………………………………….. 33

Класс Library…………………………………………………………………………………………………………………… 33

Классы Librarian, Member и User………………………………………………………………………………….. 33

Класс Catalog…………………………………………………………………………………………………………………. 35

Класс Book………………………………………………………………………………………………………………………. 35

Класс BookItem……………………………………………………………………………………………………………….. 35

1.1.4. Этап реализации………………………………………………………………………………………………………. 36

1.2. Источники сложности…………………………………………………………………………………………………………. 36

1.2.1. Множество отношений между классами……………………………………………………………….. 38

1.2.2. Непредсказуемое поведение кода…………………………………………………………………………… 40

1.2.3. Нетривиальная сериализация данных…………………………………………………………………… 42

1.2.4. Сложные иерархии классов…………………………………………………………………………………….. 44

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

Глава 2. Разделение кода и данных……………………………………………………….. 51

2.1. Две части системы ДОП……………………………………………………………………………………………………… 52

2.2. Объекты данных………………………………………………………………………………………………………………….. 54

2.3. Модули кода……………………………………………………………………………………………………………………….. 56

2.4. Системы ДОП просты для понимания………………………………………………………………………………. 61

2.5. Системы ДОП являются гибкими……………………………………………………………………………………….. 64

Итоги…………………………………………………………………………………………………………………………………………… 68

Глава 3. Основные манипуляции с данными…………………………………………. 69

3.1. Разработка модели данных……………………………………………………………………………………………….. 70

3.2. Представление записей в виде карт…………………………………………………………………………………… 74

3.3. Манипулирование данными с помощью универсальных функций……………………………….. 81

3.4. Вычисление результатов поиска……………………………………………………………………………………….. 85

3.5. Обработка записей различных типов……………………………………………………………………………….. 93

Итоги…………………………………………………………………………………………………………………………………………… 98

Глава 4. Управление состоянием………………………………………………………….. 101

4.1. Несколько версий системных данных…………………………………………………………………………….. 102

4.2. Структурное совместное использование………………………………………………………………………… 104

4.3. Реализация структурного совместного использования…………………………………………………. 110

4.4. Безопасность данных……………………………………………………………………………………………………….. 112

4.5. Фиксационный этап изменения……………………………………………………………………………………….. 114

4.6. Обеспечение целостности состояния системы……………………………………………………………….. 116

4.7. Восстановление предыдущих состояний……………………………………………………………………….. 117

Итоги…………………………………………………………………………………………………………………………………………. 120

Глава 5. Основы контроля конкурентности…………………………………………. 123

5.1. Оптимистичный контроль конкурентности……………………………………………………………………. 124

5.2. Согласование между конкурентными изменениями………………………………………………………. 126

5.3. Сокращение коллекций…………………………………………………………………………………………………….. 129

5.4. Структурная разница……………………………………………………………………………………………………….. 131

5.5. Имплементация алгоритма согласования………………………………………………………………………. 140

Итоги…………………………………………………………………………………………………………………………………………. 142

Глава 6. Модульные тесты…………………………………………………………………… 145

6.1. Простота дата-ориентированных тестовых кейсов………………………………………………………. 145

6.2. Модульные тесты для кода манипулирования данными……………………………………………… 147

6.2.1. Дерево вызовов функций……………………………………………………………………………………….. 149

6.2.2. Модульные тесты для функций вниз по дереву…………………………………………………… 150

6.2.3. Модульные тесты для узлов в дереве…………………………………………………………………… 154

6.3. Модульные тесты для запросов………………………………………………………………………………………. 157

6.4. Модульные мутационные тесты……………………………………………………………………………………… 162

Движение вперед……………………………………………………………………………………………………………………… 171

Итоги…………………………………………………………………………………………………………………………………………. 172

Часть 2. Масштабируемость……………………………………………………. 175

Глава 7. Основы валидации данных……………………………………………………. 179

7.1. Валидация данных в ДОП………………………………………………………………………………………………… 179

7.2. Суть JSON-схемы………………………………………………………………………………………………………………. 181

7.3. Гибкость и строгость схемы…………………………………………………………………………………………….. 188

7.4. Композиция схемы……………………………………………………………………………………………………………. 193

7.5. Сведения о сбоях при валидации данных………………………………………………………………………. 197

Итоги…………………………………………………………………………………………………………………………………………. 202

Глава 8. Расширенный контроль конкурентности……………………………….. 203

8.1. Сложность блокировок…………………………………………………………………………………………………….. 203

8.2. Потокобезопасный счетчик с атомами…………………………………………………………………………… 205

8.3. Потокобезопасный кеш с атомами………………………………………………………………………………….. 211

8.4. Управление состоянием с помощью атомов…………………………………………………………………… 213

Итоги…………………………………………………………………………………………………………………………………………. 215

Глава 9. Персистентные структуры данных…………………………………………. 217

9.1. Потребность в персистентных структурах данных………………………………………………………. 217

9.2. Эффективность персистентных структур данных…………………………………………………………. 221

9.3. Библиотеки персистентных структур данных……………………………………………………………….. 227

9.3.1. Персистентные структуры данных в Java……………………………………………………………. 228

9.3.2. Персистентные структуры данных в JavaScript………………………………………………….. 229

9.4. Персистентные структуры данных в действии………………………………………………………………. 232

9.4.1. Написание запросов с персистентными структурами данных………………………….. 232

9.4.2. Операции изменения при работе с персистентными структурами данных………. 235

9.4.3. Сериализация и десериализация………………………………………………………………………….. 236

9.4.4. Структурная разница…………………………………………………………………………………………….. 237

Итоги…………………………………………………………………………………………………………………………………………. 240

Глава 10. Операции с базой данных…………………………………………………….. 243

10.1. Извлечение данных из базы данных……………………………………………………………………………… 244

10.2. Хранение данных в базе данных…………………………………………………………………………………… 251

10.3. Простая манипуляция данными…………………………………………………………………………………….. 254

10.4. Продвинутая обработка данных…………………………………………………………………………………… 258

Итоги…………………………………………………………………………………………………………………………………………. 266

Глава 11. Веб-сервисы………………………………………………………………………….. 269

11.1. Другой запрос функции………………………………………………………………………………………………….. 270

11.2. Создание внутренностей, подобных внешностям……………………………………………………….. 270

11.3. Представление запроса клиента в виде карты…………………………………………………………….. 273

11.4. Представление ответа сервера в виде карты……………………………………………………………….. 276

11.5. Дальнейшая передача информации……………………………………………………………………………… 281

11.6. Расширение результатов поиска в действии………………………………………………………………… 284

11.7. Доставка в срок……………………………………………………………………………………………………………….. 295

Итоги…………………………………………………………………………………………………………………………………………. 296

Часть 3. Удобство сопровождения………………………………………… 297

Глава 12. Расширенная проверка данных……………………………………………. 299

12.1. Проверка аргументов функции………………………………………………………………………………………. 299

12.2. Проверка возвращаемого значения………………………………………………………………………………. 308

12.3. Расширенная проверка данных…………………………………………………………………………………….. 310

12.4. Автоматическое создание диаграмм модели данных…………………………………………………. 314

12.5. Автоматическая генерация модульных тестов на основе схемы……………………………….. 316

12.6. Новый подарок……………………………………………………………………………………………………………….. 324

Итоги…………………………………………………………………………………………………………………………………………. 326

Глава 13. Полиморфизм……………………………………………………………………….. 327

13.1. Сущность полиморфизма……………………………………………………………………………………………….. 327

13.2. Мультиметоды с единичной отправкой……………………………………………………………………….. 332

13.3. Мультиметоды с множественной отправкой……………………………………………………………….. 337

13.4. Мультиметоды с динамической отправкой………………………………………………………………….. 343

13.5. Интеграция мультиметодов: производство………………………………………………………………….. 346

Итоги…………………………………………………………………………………………………………………………………………. 351

Глава 14. Расширенная обработка данных…………………………………………… 353

14.1. Обновление значения на карте с помощью выразительности……………………………………. 353

14.2. Манипулирование вложенными данными……………………………………………………………………. 357

14.3. Использование наилучшего инструмента для работы……………………………………………….. 360

14.4. Легкое разматывание……………………………………………………………………………………………………… 365

Итоги…………………………………………………………………………………………………………………………………………. 370

Глава 15. Отладка………………………………………………………………………………… 371

15.1. Детерминизм в программировании……………………………………………………………………………….. 371

15.2. Репродуцируемость с числами и строками………………………………………………………………….. 375

15.3. Репродуцируемость с любыми данными………………………………………………………………………. 379

15.4. Модульные тесты……………………………………………………………………………………………………………. 383

15.5. Работа с внешними источниками данных…………………………………………………………………….. 392

Прощание…………………………………………………………………………………………………………………………………. 394

Итоги…………………………………………………………………………………………………………………………………………. 394

Приложение A. Принципы дата-ориентированного программирования. 397

A.1. Принцип № 1: отделяйте код от данных………………………………………………………………………… 398

A.1.1. Иллюстрация к принципу № 1………………………………………………………………………………. 399

Нарушение принципа № 1 в ООП……………………………………………………………………………….. 399

Нарушение принципа № 1 в ФП………………………………………………………………………………….. 400

Соблюдение принципа № 1 в ООП……………………………………………………………………………… 400

Соблюдение принципа № 1 в ФП………………………………………………………………………………… 401

A.1.2. Преимущества принципа № 1……………………………………………………………………………….. 401

Преимущество № 1: код может быть повторно использован в различных контекстах 402

Преимущество № 2: код может быть протестирован изолированно……………………….. 405

Преимущество № 3: системы, как правило, менее сложны………………………………………. 406

A.1.3. Издержки принципа № 1……………………………………………………………………………………….. 408

Издержка № 1: отсутствие контроля над тем, какой код к каким данным
может получить доступ……………………………………………………………………………………………….. 408

Издержка № 2: отсутствие пакетирования…………………………………………………………………. 408

Издержка № 3: системы состоят из большего количества объектов……………………….. 409

A.1.4. Основная суть принципа № 1……………………………………………………………………………….. 409

A.2. Принцип № 2: представляйте данные с помощью обобщенных структур………………….. 410

A.2.1. Иллюстрация к принципу № 2………………………………………………………………………………. 410

A.2.2. Преимущества принципа № 2……………………………………………………………………………….. 411

Применение функций, которые не ограничены определенным случаем использования……….. 412

Гибкая модель данных…………………………………………………………………………………………………. 412

A.2.3. Издержки принципа № 2……………………………………………………………………………………….. 413

Издержка № 1: снижение производительности………………………………………………………….. 413

Издержка № 2: отсутствие схемы данных………………………………………………………………….. 414

Издержка № 3: отсутствует проверка данных на валидность
во время компиляции……………………………………………………………………………………………………. 414

Издержка № 4: необходимость явного приведения типов………………………………………… 415

A.2.4. Основная суть принципа № 2……………………………………………………………………………….. 416

A.3. Принцип № 3: данные неизменяемы……………………………………………………………………………….. 417

A.3.1. Иллюстрация к принципу № 3………………………………………………………………………………. 417

A.3.2. Преимущества принципа № 3……………………………………………………………………………….. 419

Преимущество № 1: надежный доступ к данным для всех……………………………………….. 419

Преимущество № 2: предсказуемое поведение кода…………………………………………………. 419

Преимущество № 3: быстрая проверка равенства…………………………………………………….. 420

Преимущество № 4: безопасность конкурентности без затрат………………………………… 420

A.3.3. Издержки принципа № 3……………………………………………………………………………………….. 420

Издержка № 1: снижается производительность………………………………………………………… 421

Издержка № 2: требуется библиотека для персистентных структур данных………… 421

A.3.4. Основная суть принципа № 3……………………………………………………………………………….. 421

A.4. Принцип № 4: отделяйте схему данных от представления данных…………………………….. 422

A.4.1. Иллюстрация к принципу № 4………………………………………………………………………………. 422

A.4.2. Преимущества принципа № 4……………………………………………………………………………….. 424

Преимущество № 1: возможность свободно выбирать, какие данные
следует валидировать………………………………………………………………………………………………….. 424

Преимущество № 2: наличие опциональных полей………………………………………………….. 426

Преимущество № 3: наличие расширенных условий валидации данных………………. 428

Преимущество № 4: возможность автоматического создания визуализации модели данных  428

A.4.3. Издержки принципа № 4……………………………………………………………………………………….. 429

Издержка № 1: слабая связь между данными и их схемой……………………………………….. 430

Издержка № 2: небольшое снижение производительности………………………………………. 430

A.4.4. Основная суть принципа № 4……………………………………………………………………………….. 430

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

Приложение B. Обобщенный доступ к данным
в статически типизированных языках…………………………………………………. 433

B.1. Динамические геттеры для строковых карт…………………………………………………………………… 433

B.1.1. Доступ к невложенным полям карты с помощью динамических геттеров………. 434

B.1.2. Доступ к вложенным полям карты с помощью динамических геттеров…………… 435

B.2. Геттеры значений для карт……………………………………………………………………………………………… 436

B.2.1. Доступ к невложенным полям карты с помощью геттеров значений……………….. 437

B.2.2. Доступ к вложенным полям карты с помощью геттеров значений…………………… 438

B.3. Типизированные геттеры для карт…………………………………………………………………………………. 440

B.3.1. Доступ к невложенным полям карты с помощью типизированных геттеров…… 440

B.3.2. Доступ к вложенным полям карты с помощью типизированных геттеров………. 441

B.4. Обобщенный доступ к членам класса……………………………………………………………………………. 443

B.4.1. Обобщенный доступ к не вложенным членам класса………………………………………… 443

B.4.2. Обобщенный доступ к членам вложенного класса…………………………………………….. 447

B.4.3. Автоматическая сериализация объектов JSON…………………………………………………… 450

Итоги…………………………………………………………………………………………………………………………………………. 451

Приложение C. Дата-ориентированное программирование:
звено в цепи парадигм программирования…………………………………………… 453

C.1. Хронология……………………………………………………………………………………………………………………….. 453

C.1.1. 1958 год: Lisp…………………………………………………………………………………………………………. 453

C.1.2. 1981 год: значения и объекты………………………………………………………………………………. 453

C.1.3. 2000 год: идеальные хеш-деревья………………………………………………………………………… 455

C.1.4. 2006 год: «Из ямы со смолой»………………………………………………………………………………. 455

C.1.5. 2007 год: Clojure…………………………………………………………………………………………………….. 455

C.1.6. 2009 год: неизменяемость для всех………………………………………………………………………. 455

C.2. Принципы ДОП как наилучший подход…………………………………………………………………………. 456

C.2.1. Принцип № 1: отделяйте код от данных……………………………………………………………… 456

C.2.2. Принцип № 2: представляйте данные с помощью обобщенных структур……….. 456

C.2.3. Принцип № 3: данные неизменяемы…………………………………………………………………….. 456

C.2.4. Принцип № 4: отделяйте схему данных от представления данных………………….. 457

C.3. ДОП и другие парадигмы, связанные с данными………………………………………………………….. 458

C.3.1. Дата-ориентированная разработка…………………………………………………………………….. 458

C.3.2. Дата-управляемое программирование………………………………………………………………… 458

C.3.3. Дата-ориентированное программирование (ДОП)…………………………………………….. 459

Итоги…………………………………………………………………………………………………………………………………………. 459

Приложение D. Ссылки на Lodash……………………………………………………….. 461

Йонатан Шарвит

Йонатан Шарвит (Yehonathan Sharvit) более двадцати лет занимается программированием, ведёт блог, выступает на конференциях и проводит семинары по дата-ориентированному подходу во всём мире.