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

Удивительная книга для детей: “Мама, не отвлекай. Я Python учу!”

Мама, не отвлекай. Я Python учу!

Эта книга + телефон – все, что нужно ребенку, чтобы полностью самостоятельно без помощи взрослых освоить основы программирования на языке Python, написать десятки игр, интерактивных программ и поделиться ими в любых привычных мессенджерах и соцсетях.
Книгу отличает сверхбыстрый старт, удобство обучения, легкость изложения и авторский юмор, .
При этом новички узнают о командах, циклах, типах данных, переменных, условных выражениях, графических примитивах и координатах. Освоят игры и анимацию, работу со строками, комментарии, методы (функции), операторы сравнения, случайные числа, условные выражения и многое другое. Электронный архив на сайте издательства содержит коды примеров и изображения эмодзи.

Для детей младшего и среднего школьного возраста

Читать и программировать можно весело и непринужденно

Телефон есть практически у каждого ребенка 10+ лет. Осталось только купить эту книгу, чтобы ребенок полностью самостоятельно смог изучить основы самого популярного языка программирования Python.

Читать и программировать можно весело и непринужденно: сидя на диване, на даче у бабушки, на прогулке или на переменках в школе – в одной руке телефон, в другой эта книга.

Первую программу на Python можно выполнить за пару минут, еще даже не открыв книгу, а только считав телефоном QR-код с ее обложки!

Прочитав всю книгу, ребенок

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

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

Лазаревский Игорь Вадимович

Лазаревский Игорь Вадимович – программист, автор книг и курсов, преподаватель Американского университета в Центральной Азии, основатель онлайн-школы по программированию Khasang со стажем преподавания современных языков программирования более 10 лет, вырастивший десятки высококлассных Senior-разработчиков с полного нуля. Ведет личный блог igor.kg.

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

3-е издание: “Внутреннее устройство Linux”

Внутреннее устройство Linux, 3 изд.

Эта книга — введение во внутреннее устройство ОС Linux. Рассмотрены основные подсистемы ядра и их сущности, механизмы контроля доступа и привилегии, принципы и механизмы контейнеризации. Уделено внимание компонентам, подсистемам Linux и их функционированию как единой системы. Подробно описано пользовательское окружение, интерфейс командной строки CLI, язык командного интерпретатора и его использование для автоматизации актуальных задач. Все положения наглядно проиллюстрированы  примерами,  разработанными автором и проверенными им на практике.

В 3-м издании описаны механизмы принудительного разграничения доступа и контроля целостности, уникальные для российского защищенного дистрибутива Astra Linux и операционных систем в целом.  Учтены последние изменения в компонентах ОС и обновлены листинги примеров. Расширена глава про сетевую подсистему, добавлена глава по современным средствам трассировки, измерения нагрузки и мониторинга производительности.

 Для студентов, пользователей, программистов и системных администраторов Linux

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

Совет для начинающих

И напоследок, самый важный совет для начинающих — начните!
Цитата из книги

  • Импортозамещение и российский Linux: все, что вы хотели знать
  • Пользовательское окружение и интерфейс командной строки CLI
  • Файлы, каталоги и файловые системы
  • Процессы и нити, каналы, сокеты и разделяемая память
  • Дискреционное и мандатное разграничение доступа, мандатный контроль целостности и привилегии процессов
  • Сетевая подсистема и службы
  • Графический интерфейс GUI: оконные системы X Window и Wayland
  • Программирование на языке командного интерпретатора
  • Контейнеры и виртуализация
  • От отдельных компонент — к системе: Linux своими руками
  • Нагрузка, производительность, мониторинг и трассировка

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

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

Импортозамещение и российский Linux: все, что вы хотели знать,
но боялись спросить. 9

Сертифицированные операционные системы.. 10

Другие операционные системы.. 11

Введение. 12

О чем эта книга?. 12

Кому адресована книга. 13

Принятые соглашения и обозначения. 14

Методические рекомендации.. 15

Что должен знать читатель. 16

Совет для начинающих. 19

Глава 1. Архитектура ОС Linux. 20

1.1. Обзор внутреннего устройства. 20

1.2. Внеядерные компоненты: программы и библиотеки.. 22

1.3. Ядерные компоненты: подсистемы управления процессами, памятью, вводом-выводом, файлами   22

1.4. Трассировка системных и библиотечных вызовов. 23

1.5. Интерфейсы прикладного программирования. 25

1.6. В заключение. 26

Глава 2. Пользовательское окружение ОС Linux. 27

2.1. Командный интерфейс. 27

2.2. Виртуальные терминалы.. 29

2.2.1. Псевдотерминалы.. 31

2.3. Управляющие символы.. 33

2.4. Управляющие последовательности.. 40

2.5. Основной синтаксис командной строки.. 43

2.5.1. Опции командной строки.. 45

2.6. Справочные системы.. 46

2.6.1. Система страниц руководства. 46

2.6.2. Справочная система GNU.. 50

2.6.3. Встроенная справка командного интерпретатора. 50

2.7. Пользователи и группы.. 51

2.7.1. Передача полномочий.. 53

2.7.2. Хранилища учетных записей.. 54

2.8. Переменные окружения и конфигурационные dot-файлы.. 55

2.9. В заключение. 62

Глава 3. Подсистема управления файлами и вводом-выводом.. 63

3.1. Файлы и дерево каталогов. 63

3.1.1. Путевые имена файлов. 64

3.2. Типы файлов. 65

3.2.1. Обычные файлы.. 66

3.2.2. Каталоги.. 67

3.2.3. Имена, данные, метаданные и индексные дескрипторы.. 68

3.2.4. Ссылки.. 69

3.2.5. Специальные файлы устройств. 73

3.2.6. Именованные каналы и файловые сокеты.. 76

3.3. Файловые дескрипторы.. 77

3.4. Файловые системы.. 80

3.4.1. Файловые системы и процедура монтирования. 80

3.4.2. Дисковые файловые системы.. 82

3.4.3. Сетевые файловые системы.. 83

3.4.4. Специальные файловые системы.. 85

3.4.5. Внеядерные файловые системы.. 86

3.5. Дискреционное разграничение доступа. 90

3.5.1. Владельцы и режим доступа к файлам.. 91

3.5.2. Базовые права доступа и дополнительные атрибуты.. 92

Режим доступа новых файлов. 94

Семантика режима доступа разных типов файлов. 95

Дополнительные атрибуты.. 97

3.5.3. Списки контроля доступа POSIX. 101

Групповая маска. 103

Права по умолчанию.. 104

3.6. Мандатное (принудительное) разграничение доступа. 105

3.6.1. Модуль принудительного разграничения доступа AppArmor. 107

3.6.2. Модуль принудительного разграничения доступа SELinux. 109

3.6.3. Модуль принудительного разграничения доступа Astra Linux. 114

3.7. Дополнительные свойства файлов. 125

3.7.1. Расширенные атрибуты файлов. 125

3.7.2. Флаги файлов. 127

3.8. В заключение. 128

Глава 4. Управление процессами и памятью.. 129

4.1. Программы и библиотеки.. 129

4.1.1. Ядро Linux. 132

4.2. Процессы и нити.. 135

4.3. Порождение процессов и нитей, запуск программ.. 139

4.3.1. Параллельные многопроцессные программы.. 143

4.3.2. Параллельные многонитевые программы.. 144

4.3.3. Двойственность процессов и нитей Linux. 148

4.4. Дерево процессов. 150

4.5. Атрибуты процесса. 152

4.5.1. Маркеры доступа. 153

4.5.2. Привилегии.. 156

4.5.3. Другие атрибуты.. 160

4.6. Классы и приоритеты процессов. 160

4.6.1. Распределение процессора между процессами.. 160

4.6.2. Распределение устройств ввода-вывода между процессами.. 167

4.7. Память процесса. 176

4.7.1. Виртуальная память. 177

4.7.2. Отображение файлов в память. 179

4.7.3. Потребление памяти.. 183

4.8. Механизм сигналов. 187

4.8.1. Сеансы и группы процессов: управление заданиями.. 192

4.9. Межпроцессное взаимодействие. 195

4.9.1. Неименованные каналы.. 196

4.9.2. Именованные каналы.. 197

4.9.3. Неименованные локальные сокеты.. 198

4.9.4. Именованные локальные сокеты.. 200

4.9.5. Разделяемая память, семафоры и очереди сообщений.. 202

Разделяемая память. 202

Семафоры и очереди сообщений.. 206

4.10. В заключение. 207

Глава 5. Программирование на языке командного интерпретатора. 209

5.1. Интерпретаторы и их сценарии.. 209

5.2. Встроенные и внешние команды.. 211

5.3. Перенаправление потоков ввода-вывода. 212

5.4. Подстановки командного интерпретатора. 218

5.4.1. Подстановки имен файлов. 218

5.4.2. Подстановки параметров. 220

Переменные — именованные параметры.. 220

Позиционные параметры.. 223

Специальные параметры.. 224

5.4.3. Подстановки вывода команд. 225

5.4.4. Подстановки арифметических выражений.. 227

5.5. Экранирование. 230

5.6. Списки команд. 233

5.6.1. Условные списки.. 234

5.6.2. Составные списки: ветвление. 236

5.6.3. Составные списки: циклы.. 241

5.6.4. Функции.. 246

5.7. Сценарии на языке командного интерпретатора. 249

5.8. Инструментальные средства обработки текста. 252

5.8.1. Фильтр строк grep. 253

5.8.2. Фильтр символов и полей cut 255

5.8.3. Процессор текстовых таблиц awk. 256

5.8.4. Потоковый редактор текста sed. 257

5.9. В заключение. 261

Глава 6. Сетевая подсистема. 262

6.1. Сетевые интерфейсы, протоколы и сетевые сокеты.. 262

6.2. Конфигурирование сетевых интерфейсов и протоколов. 266

6.2.1. Ручное конфигурирование. 266

6.2.2. Автоматическое конфигурирование. 268

6.3. Служба имен и DNS/mDNS-резолверы.. 276

6.4. Сетевые службы.. 281

6.4.1. Служба SSH.. 281

6.4.2. Почтовые службы SMTP, POP/IMAP. 289

6.4.3. Служба WWW… 292

6.4.4. Служба FTP. 294

6.4.5. Служба NFS. 296

NFS-клиент. 296

NFS-сервер. 297

6.4.6. Служба SMB/CIFS. 298

Имена NetBIOS. 299

CIFS-клиенты.. 300

6.4.7. Служба каталогов LDAP. 302

Служба имен и пользовательские учетные записи.. 306

6.5. Средства сетевой диагностики.. 307

6.5.1. Анализаторы пакетов tcpdump и tshark. 307

6.5.2. Сетевой сканер nmap. 310

6.5.3. Мониторинг сетевых соединений процессов. 311

6.6. В заключение. 313

Глава 7. Графическая система X Window System… 315

7.1. X-сервер. 315

7.2. X-клиенты и X-протокол. 317

7.3. Оконные менеджеры.. 322

7.3.1. Декорирование на клиентской стороне. 325

7.4. Настольные пользовательские окружения. 327

7.5. Библиотеки интерфейсных элементов. 329

7.6. Расширения Х-протокола. 332

7.6.1. Расширение Composite и композитный менеджер. 334

7.6.2. GLX, DRI и 3D-графика. 336

7.7. Запуск X Window System… 338

7.7.1. Локальный запуск X-клиентов. 338

7.7.2. Дистанционный запуск X-клиентов. 338

7.7.3. Управление X-дисплеями: XDMCP-менеджер и протокол. 341

7.8. Программный интерфейс X Window System… 342

7.8.1. Трассировка X-библиотек и X-протокола. 342

7.8.2. 3D-графика и инфраструктура прямого рендеринга DRI 348

7.9. В заключение. 354

Глава 8. Графическая система Wayland. 356

8.1. Wayland-композитор. 358

8.2. Wayland-клиенты и Wayland-протокол. 359

8.3. Запуск графической среды на основе Wayland. 365

8.4. В заключение. 366

Глава 9. Контейнеры и виртуальные машины.. 367

9.1. Чрутизация. 368

9.2. Пространства имен.. 372

9.3. Контейнеризация: runc и docker. 377

9.4. Группы управления (cgroups). 381

9.5. В заключение. 385

Глава 10. От отдельных компонент — к системе. 386

10.1. Как Linux загружается. 386

10.2. Как обнаруживаются драйверы устройств. 390

10.3. Как запускаются системные службы.. 393

10.4. Linux своими руками.. 402

10.5. В заключение. 411

Глава 11. Нагрузка, производительность, мониторинг и трассировка. 412

11.1. Метрики и инструменты измерения нагрузки и производительности.. 412

11.1.1. Центральный процессор и память. 412

11.1.2. Устройства ввода-вывода. 420

11.2. Мониторинг и трассировка. 424

11.2.1. Трассировка и отладка программ.. 426

11.3. В заключение. 439

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

Список литературы.. 442

Для удовольствия. 442

Начинающим.. 442

Программистам.. 442

Бесстрашным.. 443

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

Кетов Дмитрий Владимирович, ведущий преподаватель в области операционных систем и сетевых технологий Санкт-Петербургского политехнического университета (СПбПУ) с многолетним стажем, начальник отдела разработки программного обеспечения Санкт-Петербургского филиала АО “Концерн радиостроения «Вега»”. Профессионально занимается теорией построения и практикой разработки операционных систем и системного программного обеспечения.

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

Встречайте: “Конфиденциальность данных”

Конфиденциальность данных

Во всех деталях рассматривается обеспечение конфиденциальности данных в масштабах большой и/или растущей компании. Уделено внимание защите конкурентных преимуществ, корпоративной репутации, а также пользовательских личных данных.  Затронуты вопросы классификации данных по степени важности их защиты, вопросы масштабирования и репликации хранилищ данных без ущерба конфиденциальности, соответствие юридическим нормам, различные инструменты, обеспечивающие отслеживание и защиту данных. Также рассказано, как с нуля выстроить защиту конфиденциальных данных в крупной компании, в том числе активно использующей облачные хранилища данных.

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

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

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

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

Ключевые аспекты книги

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

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

 

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

Вступительное слово. 13

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

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

О книге. 20

Кому следует прочитать эту книгу. 20

Структура книги. 20

О коде. 22

Об авторе. 23

Об иллюстрации на обложке. 24

Часть I. Конфиденциальность, данные и ваш бизнес. 25

Глава 1. Инженерия конфиденциальности: зачем нужна
и как ее масштабировать. 27

1.1. Что такое конфиденциальность. 28

1.2. Как данные поступают в компанию и перемещаются внутри нее. 32

1.3. Почему конфиденциальность имеет значение. 34

1.3.1. Штрафы реальны. 34

1.3.2. Погоня за эффективностью в начале пути может вызвать проблемы конфиденциальности в будущем  36

Gamesbuster: анализ конкретного примера. 36

1.3.3. Расследования нарушений конфиденциальности — не просто преграда
на пути к успеху. 39

Еврокомиссия оштрафовала компанию WhatsApp на 110 млн евро
за искажение данных. 40

Антимонопольный регулятор Италии оштрафовал WhatsApp
на 3 млн евро. 41

Пять органов ЕС по надзору за соблюдением законодательства
по защите данных подают иски к корпорации Facebook
за изменения политики в 2014-м и другие действия с данными. 42

1.3.4. Защита конфиденциальности как возможность для бизнеса:
реальный пример. 44

1.4. Конфиденциальность: ментальная модель. 46

1.5. Как конфиденциальность влияет на бизнес на макроуровне. 49

1.5.1. Конфиденциальность и безопасность: период ковида. 49

1.5.2. Конфиденциальность и правила: циклический процесс. 51

1.6. Инструменты и техники защиты конфиденциальности: возможности
и варианты. 53

1.6.1. Дилемма: разрабатывать или покупать. 54

1.6.2. Инструменты защиты конфиденциальности от сторонних
разработчиков: они действительно работают и масштабируются?. 56

Платформенные решения для обеспечения конфиденциальности:
BigID и OneTrust 56

Специализированные решения для защиты конфиденциальности: Privicera, Collibra, DataGrail, Informatica, SailPoint 59

1.6.3. Риски при покупке сторонних инструментов защиты конфиденциальности. 60

1.7. В чем эта книга не поможет. 61

1.8. Как изменение роли инженеров повлияло на защиту конфиденциальности. 61

Резюме. 64

Глава 2. Представление о данных и конфиденциальности. 65

2.1. Что следует из понятия конфиденциальности. 65

2.1.1. Почему обеспечить конфиденциальность трудно. 66

2.1.2. Инженерия конфиденциальности на местах: чего необходимо добиться. 67

2.1.3. Конфиденциальность, системы данных и соблюдение политики. 70

2.2. Это могла бы быть ваша компания. 72

2.3. Данные, стратегия развития бизнеса и конфиденциальность. 76

2.4. Примеры нарушения конфиденциальности данных. 78

2.4.1. Equifax. 78

2.4.2. Нарушение в работе Службы управления персоналом. 80

2.4.3. Компании LabCorp и Quest Diagnostics 82

2.5. Конфиденциальность и нормативно-правовая база. 83

2.5.1. Как нормативные акты влияют на ваш продукт и его пользователей. 83

2.5.2. Как ваша программа должна помочь подготовиться к изменению законодательства о защите конфиденциальности данных. 85

2.6. Конфиденциальность и пользователь. 86

2.6.1. Превращение в полноправного американца и конфиденциальность. 86

2.6.2. Опасения современных пользователей по поводу конфиденциальности. 87

2.7. После создания инструментов наступает самое сложное: разработка
программы. 88

2.8. Разрабатывая программу, сначала сформируйте корпоративную культуру, ориентированную на конфиденциальность данных. 92

Резюме. 95

Часть II. Упреждающая программа защиты конфиденциальности: управление данными  97

Глава 3. Классификация данных. 99

3.1. Классификация данных в контексте клиента. 100

3.2. Зачем нужна классификация данных. 101

3.2.1. Классификация как часть управления данными. 102

3.2.2. Классификация данных: как она помогает выстраивать приоритеты. 103

Как определяются приоритеты защиты данных. 103

Сегментация данных. 106

Упражнение по защите данных: линза определения приоритетов. 108

3.2.3. Сопоставление примеров по классификации данных в отрасли технологий. 110

3.2.4. Неструктурированные данные и управление. 111

3.2.5. Классификация данных как этап на пути к зрелости. 112

Что такое зрелость организации. 113

Классификация данных и зрелость организации. 114

3.3. Как применить классификацию данных для повышения
конфиденциальности. 116

3.3.1. Классификация данных и варианты доступа к ним. 116

3.3.2. Классификация данных, управление доступом и конфиденциальность: пример 1  118

3.3.3. Классификация данных, управление доступом и конфиденциальность: пример 2  120

3.4. Классификация данных согласно законам о конфиденциальности. 121

3.4.1. Классификация данных как выделение главного в законах
о конфиденциальности. 121

3.4.2. Классификация данных для разрешения противоречий
в интерпретациях законов о конфиденциальности. 122

3.5. Процесс классификации данных. 124

3.5.1. Работа над классификацией данных с участниками из разных отделов. 124

3.5.2. Оформление и переработка классификации данных. 127

3.5.3. Процесс классификации данных: шаблон Microsoft 128

3.6. Классификация данных: пример. 129

Резюме. 133

Глава 4. Учет данных. 134

4.1. Учет данных: что это такое и зачем это нужно. 135

4.2. Машиночитаемые метки. 138

4.2.1. Что такое метки для учета данных. 138

4.2.2. Метки для учета данных: конкретный пример. 139

4.3. Разработка базовой версии. 143

4.4. Техническая архитектура. 145

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

4.4.2. Архитектурные возможности учета данных. 148

4.4.3. Рабочий процесс учета данных. 150

4.5. Представление о данных. 153

4.5.1. Процесс определения метаданных. 154

4.5.2. Процесс обнаружения метаданных. 156

4.6. Когда следует приступать к учету данных. 157

4.6.1. Почему процесс учета данных так сложен?. 157

4.6.2. Учет данных: лучше раньше, чем позже. 158

4.7. Учет данных — небинарный процесс. 161

4.7.1. Первый уровень учета данных. 161

4.7.2. Второй уровень учета данных. 163

4.7.3. Третий уровень учета данных. 164

Поддержка функций загрузки личных данных и запросы субъекта
на доступ к персональным данным. 165

Поддержка функции удаления данных. 165

Получение информации о бизнесе. 166

4.8. Как выглядит успешный процесс учета данных. 167

4.8.1. Объективные показатели успешности учета данных. 167

4.8.2. Субъективные показатели успешности учета данных. 168

Резюме. 169

Глава 5. Совместное использование данных. 171

5.1. Совместное использование данных: зачем компаниям ими делиться. 172

5.1.1. Совместное использование данных: службы такси. 173

5.1.2. Совместное использование данных: интернет-реклама. 174

5.1.3. Конфиденциальность в рекламе. 178

5.2. Как безопасно обмениваться данными: безопасность — союзник конфиденциальности  180

5.2.1. Отслеживание президента Трампа. 180

5.2.2. Защита передаваемых данных. 182

5.2.3. Защита данных в состоянии покоя. 183

Контроль доступа как инструмент защиты конфиденциальности. 184

Шифрование как инструмент защиты конфиденциальности. 185

5.3. Методы обфускации для безопасного обмена данными. 187

5.3.1. Обмен данными и национальная безопасность США.. 188

5.3.2. Анонимизация данных: связь между точностью и сроком хранения. 189

5.3.3. Анонимизация данных: взаимосвязь между точностью и доступом. 191

5.3.4. Анонимизация данных: сопоставление универсальных
идентификаторов с внутренними. 194

5.4. Передача внутренних идентификаторов третьим лицам. 196

5.4.1. Сценарий использования № 1: минимальная сессия
(без связи видов деятельности пользователя) 197

Предлагаемые методы псевдонимизации. 198

5.4.2. Сценарий использования № 2: одна сессия на каждый набор данных (связывание действий одного пользователя в рамках набора данных) 198

Предлагаемые методы псевдонимизации. 198

5.4.3. Сценарий использования № 3: наборы данных, охватывающие
всю сессию (связывание между наборами данных) 199

Предлагаемые методы псевдонимизации. 199

5.4.4. Восстановление псевдонимизированных значений. 200

Таблица сопоставления. 200

Двусторонняя криптографическая функция. 200

5.5. Измерение воздействия на конфиденциальность. 201

5.5.1. K-анонимность. 201

K-анонимность с неточными данными. 202

K-анонимность с точными данными. 203

K-анонимность и лучшая практика в отрасли. 204

5.5.2. L-разнообразие. 205

5.6. Ущерб конфиденциальности: это не учения. 206

5.6.1. Facebook и Cambridge Analytica. 207

5.6.2. Совместное использование данных и слабые места. 208

Резюме. 209

Часть III. Инструменты и процессы.. 211

Глава 6. Техническая проверка защиты конфиденциальности. 213

6.1. Что такое проверка защиты конфиденциальности. 214

6.1.1. Оценка воздействия на конфиденциальность. 216

6.1.2. Оценка воздействия на защиту данных. 217

Определите необходимость оценки воздействия на защиту данных. 219

Опишите процесс обработки данных. 220

Опишите отношения с пользователем. 221

Консультация. 222

Проведите оценку риска. 222

Определите меры по смягчению риска. 223

6.2. Внедрение процесса юридической проверки защиты конфиденциальности. 223

6.3. Обоснование необходимости технической проверки защиты конфиденциальности. 226

6.3.1. Сроки и объем. 226

6.3.2. Что входит в техническую проверку, но не входит в юридическую.. 228

6.4. Интеграция технических проверок защиты конфиденциальности в процесс внедрения инноваций  231

6.4.1. Когда проводится техническая проверка защиты конфиденциальности. 232

6.4.2. Как реализовать техническую защиту конфиденциальности. 234

6.5. Масштабирование процесса технической проверки защиты конфиденциальности. 240

6.5.1. Совместное использование данных. 240

6.5.2. Модели машинного обучения. 241

Машинное обучение и данные. 241

Машинное обучение, данные и конфиденциальность. 243

6.6. Примеры технических проверок защиты конфиденциальности. 244

6.6.1. Приложения-мессенджеры и приложения для взаимодействия:
связаны ли они?. 244

6.6.2. Маски и отслеживание контактов. 247

Резюме. 249

Глава 7. Удаление данных. 250

7.1. Почему компания должна удалять данные. 251

7.2. Как выглядит современная архитектура сбора данных. 253

7.2.1. Распределенная архитектура и микросервисы: как компании
собирают данные. 253

7.2.2. Как хранятся получаемые в реальном времени данные
и как организуется к ним доступ. 255

7.2.3. Хранение архивных данных. 255

7.2.4. Другие места хранения данных. 257

7.2.5. Как хранилище данных превращается из коллекции в архив. 258

7.3. Как работает архитектура сбора данных. 260

7.4. Удаление данных на уровне учетной записи: отправная точка. 262

7.4.1. Удаление учетной записи: разработка инструментария и процесса. 262

7.4.2. Масштабирование удаления учетной записи. 263

7.5. Удаление данных на уровне учетной записи: автоматизация
и масштабирование для распределенных услуг. 265

7.5.1. Регистрация сервисов и полей данных для удаления. 267

7.5.2. Планирование удаления данных. 269

7.6. Удаление конфиденциальных данных. 270

7.7. Кто должен управлять удалением данных. 274

Резюме. 276

Глава 8. Экспорт пользовательских данных:
запрос субъекта на доступ к персональным данным.. 277

8.1. Что такое DSAR. 278

8.1.1. Какие права предоставляют пользователям нормативные положения
о DSAR. 281

8.1.2. Обзор процесса выполнения DSAR. 283

8.2. Настройка процесса работы с DSAR. 285

8.2.1. Ключевые этапы создания системы выполнения DSAR. 286

8.2.2. Создание панели мониторинга состояния DSAR. 288

8.3. Автоматизация DSAR, структуры и потоки данных. 290

8.3.1. Компоненты DSAR. 290

8.3.2. Модели в форме параллелепипеда: подмножество данных
запроса DSAR. 292

8.3.3. Шаблоны DSAR. 295

8.3.4. Источники данных для шаблонов DSAR. 297

8.4. Интерфейсы и информационные панели для сотрудников. 299

Резюме. 307

Часть IV. Безопасность, масштабирование и кадровое обеспечение. 311

Глава 9. Разработка платформы управления согласием.. 311

9.1. В чем важность управления согласием. 312

9.1.1. Управление согласием и нормативные документы в области защиты конфиденциальности  313

9.1.2. Управление согласием и изменения в технологической отрасли. 315

9.1.3. Управление согласием и ваш бизнес. 317

9.2. Платформа управления согласием. 318

9.3. Модель схемы данных для управления согласием. 320

9.3.1. Отношения элементов, помогающие структурировать CMP. 321

9.3.2. Схемы отношений элементов: база данных CMP. 322

Таблица Feature. 323

Таблица Disclosure_Version. 325

Таблица «Согласие пользователя». 326

Таблица Locale_Copy. 328

Таблица LocaleTerritory. 329

9.4. Код согласия: объекты. 330

9.4.1. API для проверки статуса согласия. 331

9.4.2. API для получения документа о разглашении данных. 333

9.4.3. API для обновления статуса согласия на документ о разглашении
данных. 336

9.4.4. API для обработки нескольких документов о разглашении данных. 339

9.4.5. API для регистрации в сервисе получения согласия. 342

9.4.6. Полезные определения для сервиса получения согласия. 343

9.5. Другие полезные возможности CMP. 345

9.6. Интеграция управления согласием в рабочий процесс продукта. 347

Резюме. 351

Глава 10. Закрытие уязвимостей системы безопасности. 352

10.1. Защита конфиденциальности путем уменьшения поверхности атаки. 354

10.1.1. Управление поверхностью атаки. 354

10.1.2. Как тестирование может вызвать риски нарушения безопасности
и конфиденциальности. 356

Использование производственных данных в тестировании. 356

Гибкое тестирование, но с расширенной поверхностью атаки. 358

Потенциальные способы смягчения последствий изучены
и отвергнуты. 358

Выводы для инженеров и технических специалистов. 359

10.1.3. Модель риска предприятия для обеспечения безопасности и конфиденциальности  360

Автоматизированное обнаружение для управления поверхностью
атаки. 360

Внедрение управления рисками безопасности. 362

Сегментация сервисов. 364

Глубокая защита. 365

Обеспечение поддержки. 366

10.2. Защита конфиденциальности путем управления доступом к периметру. 367

10.2.1. Взлом компании Target 368

Разведка с целью обнаружения сетевых уязвимостей. 370

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

поставщику. 370

Использование уязвимости веб-приложения. 371

Поиск данных о клиентах. 372

Получение и поддержание доступа к данным клиентов. 372

Расширение доступа к данным клиента. 373

Кража личных данных клиентов и данных кредитных карт. 373

Отправка украденных данных за пределы сети компании. 374

10.2.2. Слабые места безопасности системы MongoDB. 376

10.2.3. Лучшие практики в сфере авторизации. 379

Принудительное разделение политики авторизации и кода. 379

Как сделать авторизацию безопасной, ориентированной на сервисы
и легко интегрируемой. 380

Проверка надежности каналов передачи данных и подтверждение подлинности личности  384

10.2.4. Почему важен непрерывный мониторинг учетных записей
и учетных данных. 387

10.2.5. Удаленная работа и риск для конфиденциальности. 389

10.3. Защита конфиденциальности путем устранения пробелов в управлении доступом. 391

10.3.1. Как работает уязвимость IDOR. 392

10.3.2. Тестирование на уязвимость IDOR и смягчение последствий. 394

Резюме. 396

Глава 11. Масштабирование, найм и рассмотрение правил. 397

11.1. Модель зрелости для инженерии конфиденциальности. 399

11.1.1. Идентификация. 401

Управление активами. 402

Управление конфиденциальностью.. 403

Управление рисками. 404

11.1.2. Защита. 406

Управление идентификацией и доступом. 406

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

Безопасность и конфиденциальность разработки программного обеспечения. 409

Защита данных в облаке. 411

Защита данных на основе инфраструктуры. 412

11.1.3. Обнаружение. 415

Разведка угроз безопасности. 415

Непрерывный мониторинг. 416

Инсайдерская угроза. 417

11.1.4. Смягчение последствий. 419

Управление реагированием на инциденты. 419

11.2. Область инженерии конфиденциальности: необходимые навыки. 420

Разработчики программного обеспечения для защиты конфиденциальности. 421

Специалисты по соблюдению нормативно-правовых требований. 421

Аналитики по вопросам конфиденциальности. 422

Менеджеры по продуктам для защиты конфиденциальности. 422

Аналитики данных. 422

Специалисты по инфраструктуре конфиденциальности. 423

UX-дизайнеры в области защиты конфиденциальности. 423

Архитекторы конфиденциальности. 423

11.3. Защита конфиденциальности и нормативно-правовой климат. 424

Резюме. 428

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

NISHANT BHAJARIA

Нишант Бхаджария (Nishant Bhajaria)– руководитель отдела стратегии и технологии конфиденциальности в компании Uber. Ранее возглавлял отделы инженерии конфиденциальности в компании Netflix, а также обеспечения безопасности данных в Google.

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

Новинка: “Сети Linux. Модели и приложения”

Сети Linux. Модели и приложения

Последовательно разобраны различные стороны сетевой инфраструктуры в Linux: базовые понятия сетей и TCP/IP, программные инструменты управления сетевым трафиком, программирование пользовательских сетевых приложений и драйверов сетевых протоколов для ядра Linux. Также исследованы  сети TOR, Yggdrasil, I2P, адресация IPv6, службы DNS, DHCP, SSH, DNS-системы разрешения имён EmerDNS и Alfis, что позволяет оценить тенденции развития современного Интернета.

Для специалистов по безопасности, сетевых администраторов, программистов

Новейшие сетевые разработки.

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

В первой части книги подробно рассказано о протоколе IPv6, который в настоящее время постепенно приходит на смену протоколу IPv4, доминировавшему на протяжении последних 30 лет.

Следующая часть подробно иллюстрирует, как устанавливать, настраивать и использовать все основные протокольные механизмы и инструменты, обеспечивающие работу Интернета и локальных сетей: DNS, DHCP, SSH.

Последняя часть, самая свежая с хронологической точки зрения, содержит выборочный обзор альтернативных проектов «Интернет завтрашнего дня»: сети TOR, Yggdrasil, I2P, альтернативные DNS-системы разрешения имён EmerDNS и Alfis. Хотя рассмотренные технологии выбраны на вкус автора, но в целом дают весьма полное впечатление о том, как эволюционирует современный Интернет.

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

Это книга о том как выживать в эпоху обрушения сети Интернет.
автор книги

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

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

Что есть и чего нет в книге?……………………………………………………………………………………………………………… 7

Соглашения и выделения, принятые в тексте…………………………………………………………………………………….. 8

Код примеров и замеченные опечатки……………………………………………………………………………………………….. 8

Источники использованной информации…………………………………………………………………………………………… 8

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

Часть I. Сетевой стек: архитектура………………………………………………………………………………………. 10

RFC……………………………………………………………………………………………………………………………………………….. 10

Принципы сетевого стека………………………………………………………………………………………………………………… 12

Инкапсуляция данных…………………………………………………………………………………………………………….. 13

Cетевой порядок байтов………………………………………………………………………………………………………….. 14

Адреса MAC………………………………………………………………………………………………………………………………….. 15

Разрешение аппаратных адресов………………………………………………………………………………………………. 18

Адреса IP……………………………………………………………………………………………………………………………………….. 19

IPv4……………………………………………………………………………………………………………………………………….. 20

Маски и подсети……………………………………………………………………………………………………………. 20

Широковещательный и групповой обмен……………………………………………………………………….. 22

Частные адреса………………………………………………………………………………………………………………. 23

Частные IPv4 и NAT……………………………………………………………………………………………………… 24

IPv6……………………………………………………………………………………………………………………………………….. 24

Префикс адреса……………………………………………………………………………………………………………… 25

Сокращения записи IPv6………………………………………………………………………………………………… 26

Локальные адреса………………………………………………………………………………………………………….. 28

Синтаксис записи IPv6…………………………………………………………………………………………………… 29

Прогноз………………………………………………………………………………………………………………………… 31

Адресные переменные в программном коде…………………………………………………………………………….. 32

Разрешение адресов и имен……………………………………………………………………………………………………… 34

Разрешение имен в программном коде…………………………………………………………………………… 35

Сетевые интерфейсы………………………………………………………………………………………………………………………. 37

Таблица маршрутизации………………………………………………………………………………………………………….. 44

Управление роутингом………………………………………………………………………………………………….. 46

Алиасные IP-адреса………………………………………………………………………………………………………………… 49

Петлевой интерфейс……………………………………………………………………………………………………………….. 53

Переименование сетевого интерфейса……………………………………………………………………………………… 54

Альтернативные имена………………………………………………………………………………………………….. 56

Порты транспортного уровня………………………………………………………………………………………………………….. 58

Источники использованной информации…………………………………………………………………………………………. 59

Часть II. Протоколы и инструменты прикладного уровня………………………………………………. 61

Инструменты диагностики………………………………………………………………………………………………………………. 61

Инструменты наблюдения………………………………………………………………………………………………………. 63

Инструменты тестирования…………………………………………………………………………………………………….. 67

Сервисы сети и systemd…………………………………………………………………………………………………………………… 69

Протокол SSH……………………………………………………………………………………………………………………………….. 70

Передача файлов по SSH………………………………………………………………………………………………………… 74

SSH и Midnight Commander…………………………………………………………………………………………………….. 75

Графическая сессия в SSH………………………………………………………………………………………………………. 79

SSH в скриптах………………………………………………………………………………………………………………………. 80

Протокол DHCP…………………………………………………………………………………………………………………………….. 81

Разрешение имен: служба DNS……………………………………………………………………………………………………….. 85

Локальный DNS-резолвер bind……………………………………………………………………………………………….. 86

Кеширующий DHCP/DNS-сервер Dnsmasq……………………………………………………………………………… 87

Кеширующий DNS-сервер средствами systemd………………………………………………………………………… 93

Оптимизация используемых серверов DNS…………………………………………………………………………….. 96

Защищенность сети: брандмауэр……………………………………………………………………………………………………. 100

Брандмауэр ufw…………………………………………………………………………………………………………………….. 102

Суперсервер inetd…………………………………………………………………………………………………………………………. 107

Сервер telnet…………………………………………………………………………………………………………………………. 109

Сокетная активация в systemd……………………………………………………………………………………………….. 112

Прокси-серверы……………………………………………………………………………………………………………………………. 118

Прокси сквозь SSH………………………………………………………………………………………………………………. 125

Клиенты прокси……………………………………………………………………………………………………………………. 125

Кто и как использует прокси?………………………………………………………………………………………………… 128

Источники использованной информации……………………………………………………………………………………….. 130

Часть III. Программирование сетевых приложений……………………………………………………….. 131

Общие принципы………………………………………………………………………………………………………………………….. 131

Клиент и сервер…………………………………………………………………………………………………………………….. 132

Сети датаграммные и потоковые……………………………………………………………………………………………. 132

Фазы соединения TCP………………………………………………………………………………………………….. 134

Адаптивные механизмы TCP……………………………………………………………………………………….. 135

Сообщения прикладного уровня в TCP………………………………………………………………………… 136

Присоединенный UDP…………………………………………………………………………………………………. 138

Сетевые сокеты и операции…………………………………………………………………………………………………………… 138

Обменные операции………………………………………………………………………………………………………………. 144

Параметры сокета…………………………………………………………………………………………………………………. 147

Использование сокетного API……………………………………………………………………………………………….. 149

UDP клиент-сервер……………………………………………………………………………………………………… 150

TCP клиент-сервер………………………………………………………………………………………………………. 152

Клиент-сервер в UNIX-домене…………………………………………………………………………………….. 157

Управляющие операции………………………………………………………………………………………………………………… 157

Классы обслуживания сервером……………………………………………………………………………………………………. 158

Последовательный сервер……………………………………………………………………………………………………… 162

Параллельный сервер……………………………………………………………………………………………………………. 162

Предварительное клонирование процесса………………………………………………………………………………. 163

Создание потока по запросу…………………………………………………………………………………………………… 164

Пул потоков…………………………………………………………………………………………………………………………. 165

Последовательный сервер с очередью обслуживания……………………………………………………………… 167

Суперсервер и сокетная активация…………………………………………………………………………………………. 168

Расширенные операции ввода/вывода……………………………………………………………………………………………. 175

Примеры реализации…………………………………………………………………………………………………………….. 176

Неблокируемый ввод/вывод…………………………………………………………………………………………………. 176

Замечания к примерам…………………………………………………………………………………………………. 177

Мультиплексирование ввода/вывода……………………………………………………………………………………… 179

Замечания к примерам…………………………………………………………………………………………………. 182

Ввод/вывод, управляемый сигналом……………………………………………………………………………………… 183

Асинхронный ввод/вывод……………………………………………………………………………………………………… 184

Символьный сокет……………………………………………………………………………………………………………………….. 185

Канальный уровень………………………………………………………………………………………………………………………. 186

Источники использованной информации……………………………………………………………………………………….. 187

Часть IV. Драйверы сетевых устройств в ядре Linux……………………………………………………….. 188

Введение в модули ядра……………………………………………………………………………………………………………….. 189

Сборка модуля……………………………………………………………………………………………………………………… 189

Точки входа и завершения…………………………………………………………………………………………………….. 190

Вывод диагностики модуля…………………………………………………………………………………………………… 191

Загрузка модулей………………………………………………………………………………………………………………….. 192

Параметры загрузки модуля………………………………………………………………………………………… 194

Подсчет ссылок использования……………………………………………………………………………………………… 198

Структуры данных сетевого стека…………………………………………………………………………………………………. 199

Путь пакета сквозь стек протоколов……………………………………………………………………………………………… 200

Прием: традиционный подход……………………………………………………………………………………………….. 200

Прием: высокоскоростной интерфейс…………………………………………………………………………………….. 201

Передача пакетов………………………………………………………………………………………………………………….. 204

Драйверы: сетевой интерфейс………………………………………………………………………………………………………… 205

Статистика интерфейса………………………………………………………………………………………………………….. 211

Виртуальный сетевой интерфейс……………………………………………………………………………………………. 213

Протокол сетевого уровня……………………………………………………………………………………………………………. 218

Еще раз о виртуальном интерфейсе……………………………………………………………………………………….. 224

Протокол транспортного уровня…………………………………………………………………………………………………… 230

Источники использованной информации……………………………………………………………………………………….. 233

Часть V. За границами традиций Интернета……………………………………………………………………. 234

Обсуждение………………………………………………………………………………………………………………………………….. 234

Стек Tor……………………………………………………………………………………………………………………………………….. 236

Tor как прокси для любых служб…………………………………………………………………………………………… 237

Ресурсы onion……………………………………………………………………………………………………………………….. 239

Mesh-сети…………………………………………………………………………………………………………………………………….. 242

Сеть Yggdrasil………………………………………………………………………………………………………………………. 243

Выбор пиров для хоста………………………………………………………………………………………………… 247

Майнинг IPv6-адресов…………………………………………………………………………………………………. 252

Yggdrasil в локальной сети…………………………………………………………………………………………… 259

Короткие адреса…………………………………………………………………………………………………………… 261

Работа в Yggdrasil без установки клиента……………………………………………………………………… 263

Скоростные показатели………………………………………………………………………………………………… 265

Еще одна сеть: I2P………………………………………………………………………………………………………………… 269

Запуск сети………………………………………………………………………………………………………………….. 270

Использование сети……………………………………………………………………………………………………… 272

Доступ к ресурсам извне………………………………………………………………………………………………. 274

Альтернативные DNS…………………………………………………………………………………………………………………… 277

Регистрация домена………………………………………………………………………………………………………………. 277

Блокчейн как регистратор домена………………………………………………………………………………………….. 278

EmerСoin………………………………………………………………………………………………………………………………. 279

OpenNIC……………………………………………………………………………………………………………………… 287

Alfis……………………………………………………………………………………………………………………………………… 289

Доступ к локальным хостам………………………………………………………………………………………………………….. 296

Источники использованной информации……………………………………………………………………………………….. 300

Некоторые краткие итоги…………………………………………………………………………………………………….. 302

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

Цилюрик Олег Иванович

Цилюрик Олег Иванович — программист-разработчик с более чем 40-летним опытом, преподаватель, автор книг по Linux и Unix , в том числе «Расширения ядра Linux. Драйверы и модули» и «Linux и Go. Эффективное низкоуровневое программирование», высоко оцененных профессионалами и широкой читательской аудиторией.

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

Суперхит: “Изучаем DDD – предметно-ориентированное проектирование”

Изучаем DDD – предметно-ориентированное проектирование

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

 Для архитекторов ПО, бизнес-аналитиков и разработчиков корпоративного программного обеспечения  

Сегодня создавать  программное обеспечение стало сложно как никогда. Приходится не только учитывать постоянно меняющиеся технологические тренды, но и понимать ту предметную область (бизнес), для которой оно создаётся.

В этой практичной книге приведён ключевой набор паттернов, принципов и практик для анализа предметной области, понимания стратегий бизнеса и, что самое важное, соотнесение процесса разработки с меняющимися потребностями заказчика.

Автор показывает, как при помощи этих практик надёжно реализовать бизнес-логику, а также обеспечить прочность программной архитектуры на годы вперёд. Вы исследуете, как предметно-ориентированное проектирование (DDD – domain-driven design) соотносится с другими методологиями, и гарантируете, что принимаемые архитектурные решения соответствуют предъявляемым бизнес-требованиям. В книге подробно разобрано внедрение DDD в рамках стартапа.

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

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

Владик Хононов – уникальный мыслитель, много лет занимающийся внедрением DDD для решения задач в самых разных предметных областях. Его идеи – постоянный источник вдохновения, подпитывающий всё сообщество DDD, а эта книга станет незаменимым ресурсом для всех, кто только начинает практиковать DDD.
 Ник Тьюн, технологический консультант в компании Empathy Software, автор книги «Modernizing Architecture»

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

Предисловие редакторской группы……………………………………………………….. 15

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

Введение………………………………………………………………………………………………… 21

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

Кому следует прочитать эту книгу………………………………………………………………………………………….. 22

Навигация по книге……………………………………………………………………………………………………………………. 23

Пример предметной области: WolfDesk………………………………………………………………………………….. 24

Соглашения, используемые в этой книге…………………………………………………………………………………. 25

Порядок использования примеров кода…………………………………………………………………………………… 26

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

Вступление…………………………………………………………………………………………….. 29

Часть I. Стратегическое проектирование……………………………. 31

Глава 1. Анализ предметной области……………………………………………………… 33

Так что же такое предметная область?……………………………………………………………………………………. 33

Что такое поддомен (subdomain)?……………………………………………………………………………………………. 34

Типы поддоменов……………………………………………………………………………………………………………. 34

Основные поддомены (core subdomains)………………………………………………………………. 34

Универсальные поддомены (generic subdomains)………………………………………………… 36

Вспомогательные поддомены (supporting subdomains)………………………………………. 36

Сравнение поддоменов………………………………………………………………………………………………….. 37

Конкурентное преимущество………………………………………………………………………………… 37

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

Изменчивость………………………………………………………………………………………………………….. 39

Стратегия решения (solution)…………………………………………………………………………………. 40

Определение границ поддоменов………………………………………………………………………………….. 41

Выделение поддоменов (Distilling subdomains)……………………………………………………. 42

Поддомены с позиции согласующихся сценариев использования……………………. 42

Сосредоточьтесь на главном………………………………………………………………………………… 44

Примеры анализа предметной области…………………………………………………………………………………… 44

Gigmaster………………………………………………………………………………………………………………………….. 44

Предметная область (домен) и поддомены………………………………………………………….. 45

Архитектурные решения……………………………………………………………………………………….. 45

BusVNext…………………………………………………………………………………………………………………………. 46

Предметная область (домен) и поддомены………………………………………………………….. 46

Архитектурные решения……………………………………………………………………………………….. 47

Кто такие специалисты в предметной области?…………………………………………………………………….. 47

Выводы……………………………………………………………………………………………………………………………………….. 48

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

Глава 2. Экспертные знания о предметной области……………………………….. 50

Задачи бизнеса (business problems)………………………………………………………………………………………….. 50

Выявление экспертных знаний…………………………………………………………………………………………………. 51

Общение……………………………………………………………………………………………………………………………………… 51

Что такое единый язык?…………………………………………………………………………………………………………….. 53

Язык бизнеса………………………………………………………………………………………………………………………………. 54

Сценарии…………………………………………………………………………………………………………………………. 54

Согласованность…………………………………………………………………………………………………………….. 55

Неоднозначные понятия………………………………………………………………………………………… 55

Понятия-синонимы…………………………………………………………………………………………………. 55

Модель предметной области……………………………………………………………………………………………………. 56

Что такое модель?…………………………………………………………………………………………………………… 56

Эффективное моделирование………………………………………………………………………………………… 56

Моделирование предметной области…………………………………………………………………………… 57

Непрерывная работа……………………………………………………………………………………………………… 57

Инструменты…………………………………………………………………………………………………………………… 58

Сложности………………………………………………………………………………………………………………………. 59

Вывод………………………………………………………………………………………………………………………………………….. 60

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

Глава 3. Как осмыслить сложность предметной области……………………….. 62

Противоречивые модели…………………………………………………………………………………………………………… 62

Что такое ограниченный контекст?………………………………………………………………………………………….. 64

Границы модели……………………………………………………………………………………………………………… 65

Уточнение термина «единый язык»………………………………………………………………………………. 65

Область применения ограниченного контекста…………………………………………………………… 66

Сравнение ограниченных контекстов и поддоменов……………………………………………………………… 67

Поддомены………………………………………………………………………………………………………………………. 67

Ограниченные контексты………………………………………………………………………………………………. 68

Взаимодействие поддоменов и ограниченных контекстов…………………………………………. 68

Границы……………………………………………………………………………………………………………………………………… 70

Физические границы………………………………………………………………………………………………………. 70

Границы владения………………………………………………………………………………………………………….. 70

Ограниченные контексты в реальной жизни…………………………………………………………………………… 71

Семантические области…………………………………………………………………………………………………. 71

Наука……………………………………………………………………………………………………………………………….. 72

Покупка холодильника………………………………………………………………………………………………….. 73

Вывод………………………………………………………………………………………………………………………………………….. 75

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

Глава 4. Интеграция ограниченных контекстов…………………………………….. 77

Сотрудничество (Cooperation)………………………………………………………………………………………………….. 77

Партнерство (Partnership)………………………………………………………………………………………………. 78

Общее ядро (shared kernel)……………………………………………………………………………………………… 78

Общие рамки (Shared scope)………………………………………………………………………………….. 79

Реализация………………………………………………………………………………………………………………. 79

Когда следует воспользоваться общим ядром…………………………………………………….. 80

Потребитель-Поставщик (Customer-supplier)…………………………………………………………………………… 81

Конформист (Conformist)……………………………………………………………………………………………….. 81

Предохранительный слой (Anticorruption layer)………………………………………………………….. 82

Сервис с открытым протоколом (Open-Host Service)…………………………………………………… 83

Разные пути (Separate Ways)…………………………………………………………………………………………………….. 84

Проблемы общения………………………………………………………………………………………………………… 84

Универсальный поддомен (Generic Subdomain)…………………………………………………………… 84

Различия в моделях………………………………………………………………………………………………………… 85

Карта контекстов (Context Map)………………………………………………………………………………………………. 85

Поддержка в актуальном состоянии…………………………………………………………………………….. 86

Ограничения……………………………………………………………………………………………………………………. 86

Вывод………………………………………………………………………………………………………………………………………….. 87

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

Часть II. Тактический замысел………………………………………………… 89

Глава 5. Реализация простой бизнес-логики………………………………………….. 90

Транзакционный сценарий……………………………………………………………………………………………………….. 90

Реализация………………………………………………………………………………………………………………………. 91

Это не так-то просто!……………………………………………………………………………………………………… 91

Отсутствие транзакционного поведения……………………………………………………………… 91

Распределенные транзакции…………………………………………………………………………………. 93

Неявные распределенные транзакции…………………………………………………………………. 94

Когда следует применять транзакционный сценарий………………………………………………… 96

Активная запись…………………………………………………………………………………………………………………………. 97

Реализация………………………………………………………………………………………………………………………. 97

Когда следует применять активную запись…………………………………………………………………. 98

Придерживайтесь прагматичного подхода…………………………………………………………………………….. 99

Вывод………………………………………………………………………………………………………………………………………….. 99

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

Глава 6. Проработка сложной бизнес-логики……………………………………….. 102

Предыстория…………………………………………………………………………………………………………………………….. 102

Модель предметной области (доменная модель)…………………………………………………………………. 102

Реализация…………………………………………………………………………………………………………………….. 103

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

Единый язык………………………………………………………………………………………………………….. 104

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

Объект-значение…………………………………………………………………………………………………… 104

Сущности………………………………………………………………………………………………………………. 110

Агрегаты……………………………………………………………………………………………………………….. 111

Доменные сервисы (domain service)……………………………………………………………………. 119

Управление сложностью……………………………………………………………………………………………… 121

Вывод………………………………………………………………………………………………………………………………………… 122

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

Глава 7. Моделирование фактора времени…………………………………………… 125

События как источник данных (Event Sourcing)……………………………………………………………………. 125

Поиск……………………………………………………………………………………………………………………………… 130

Анализ……………………………………………………………………………………………………………………………. 132

Источник истины………………………………………………………………………………………………………….. 133

Хранилище событий…………………………………………………………………………………………………….. 133

Модель предметной области, основанная на событиях………………………………………………………. 134

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

Недостатки……………………………………………………………………………………………………………………. 138

Часто задаваемые вопросы…………………………………………………………………………………………………….. 139

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

Удаление данных…………………………………………………………………………………………………………. 141

А почему просто нельзя ………………………………………………………………………………………………. 141

Вывод………………………………………………………………………………………………………………………………………… 142

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

Глава 8. Архитектурные паттерны……………………………………………………….. 144

Сопоставление бизнес-логики и архитектурных паттернов……………………………………………….. 144

Слоеная архитектура (Layered Architecture)…………………………………………………………………………. 145

Слой представления (Presentation layer)…………………………………………………………………….. 145

Слой бизнес-логики (Business logic layer)……………………………………………………………………. 146

Слой доступа к данным (Data access layer)………………………………………………………………… 146

Связь между слоями……………………………………………………………………………………………………… 147

Вариация……………………………………………………………………………………………………………………….. 148

Сервисный слой (Service layer)……………………………………………………………………………. 148

Терминология……………………………………………………………………………………………………….. 151

Когда предпочтительнее использовать слоеную архитектуру……………………………….. 151

Дополнительно: сравнение слоев и уровней……………………………………………………… 152

Порты и адаптеры (Ports and adapters)………………………………………………………………………………….. 152

Терминология……………………………………………………………………………………………………………….. 152

Принцип инверсии зависимостей (Dependency inversion principle)…………………………… 153

Интеграция инфраструктурных компонентов……………………………………………………………. 154

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

Когда предпочтительнее использовать порты и адаптеры……………………………………… 155

Разделение ответственности команд и запросов (Command-Query Responsibility Segregation) 155

Мультипарадигменное моделирование (Polyglot modelling)…………………………………….. 156

Реализация…………………………………………………………………………………………………………………….. 156

Модель выполнения команд……………………………………………………………………………….. 157

Модели чтения (проекции)………………………………………………………………………………….. 157

Проецирование моделей чтения………………………………………………………………………………….. 157

Синхронные проекции…………………………………………………………………………………………. 158

Асинхронные проекции……………………………………………………………………………………….. 159

Сложности…………………………………………………………………………………………………………………….. 160

Разделение моделей……………………………………………………………………………………………………… 160

Когда предпочтительнее использовать CQRS…………………………………………………………… 160

Область применения………………………………………………………………………………………………………………… 161

Вывод………………………………………………………………………………………………………………………………………… 162

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

Глава 9. Паттерны взаимодействия……………………………………………………… 164

Преобразование моделей………………………………………………………………………………………………………… 164

Преобразование моделей без сохранения состояния……………………………………………….. 165

Синхронный режим……………………………………………………………………………………………… 165

Асинхронный режим……………………………………………………………………………………………. 167

Преобразование моделей с отслеживанием состояния…………………………………………….. 168

Агрегирование входящих данных………………………………………………………………………. 168

Объединение нескольких источников………………………………………………………………… 169

Интеграция агрегатов……………………………………………………………………………………………………………… 170

Паттерн исходящих сообщений (Outbox)…………………………………………………………………… 172

Извлечение неопубликованных событий…………………………………………………………… 173

Сага……………………………………………………………………………………………………………………………….. 174

Согласованность………………………………………………………………………………………………….. 177

Диспетчер процессов……………………………………………………………………………………………………. 177

Вывод………………………………………………………………………………………………………………………………………… 180

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

Часть III. Применение предметно-ориентированного проектирования на практике………………………………………………………………………………………….. 183

Глава 10. Эвристика проектирования………………………………………………….. 184

Эвристика…………………………………………………………………………………………………………………………………. 184

Ограниченные контексты………………………………………………………………………………………………………… 184

Паттерны реализации бизнес-логики…………………………………………………………………………………….. 186

Архитектурные паттерны……………………………………………………………………………………………………….. 188

Стратегия тестирования………………………………………………………………………………………………………….. 189

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

Ромб тестирования……………………………………………………………………………………………………….. 190

Перевернутая пирамида тестирования………………………………………………………………………. 190

Дерево тактических проектных решений………………………………………………………………………………. 191

Вывод………………………………………………………………………………………………………………………………………… 192

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

Глава 11. Эволюция проектных решений…………………………………………….. 194

Изменения в предметных областях………………………………………………………………………………………… 194

Из основного в универсальный……………………………………………………………………………………. 195

Из универсального в основной……………………………………………………………………………………. 195

Из вспомогательного в универсальный………………………………………………………………………. 196

Из вспомогательного в основной………………………………………………………………………………… 196

Из основного во вспомогательный……………………………………………………………………………… 196

Из универсального во вспомогательный……………………………………………………………………. 196

Стратегические аспекты проектирования…………………………………………………………………………….. 197

Тактические аспекты проектирования…………………………………………………………………………………… 198

Преобразование транзакционного сценария в активную запись…………………………….. 198

Преобразование активной записи в модель предметной области…………………………… 199

Преобразование модели предметной области в модель предметной области, основанную на событиях           200

Генерация прошлых переходов состояния………………………………………………………………… 201

Моделирование событий миграции……………………………………………………………………………. 202

Организационные изменения………………………………………………………………………………………………….. 202

Переход от партнерства к отношениям потребитель-поставщик……………………………. 203

Переход от отношений потребитель-поставщик к модели разных путей……………….. 204

Знания предметной области…………………………………………………………………………………………………… 204

Рост проекта…………………………………………………………………………………………………………………………….. 205

Поддомены……………………………………………………………………………………………………………………. 205

Ограниченные контексты…………………………………………………………………………………………….. 206

Агрегаты………………………………………………………………………………………………………………………… 207

Вывод………………………………………………………………………………………………………………………………………… 207

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

Глава 12. EventStorming……………………………………………………………………….. 210

Что такое EventStorming?………………………………………………………………………………………………………… 210

Кто принимает участие в EventStorming?……………………………………………………………………………… 210

Что нужно для проведения EventStorming?…………………………………………………………………………… 211

Процесс проведения EventStorming……………………………………………………………………………………….. 212

Этап 1: Проведение неструктурированного исследования……………………………………… 212

Этап 2: Выстраивание в хронологическом порядке…………………………………………………. 213

Этап 3: Проблемные места (pain points)…………………………………………………………………….. 213

Этап 4: Выявление ключевых событий (pivotal events)…………………………………………….. 214

Этап 5: Выявление команд (commands)…………………………………………………………………….. 215

Этап 6: Выявление правил (policies)……………………………………………………………………………. 216

Этап 7: Выявление моделей чтения (read model)………………………………………………………. 217

Этап 8: Выявление внешних систем (external systems)……………………………………………… 217

Этап 9: Выявление агрегатов………………………………………………………………………………………. 218

Этап 10: Выявление ограниченных контекстов………………………………………………………… 218

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

Когда следует проводить EventStorming……………………………………………………………………………….. 220

Советы по проведению……………………………………………………………………………………………………………. 221

Отслеживание динамики проведения семинара………………………………………………………… 221

Проведение EventStorming с удаленными участниками…………………………………………… 222

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

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

Глава 13. Предметно-ориентированное проектирование на практике….. 224

Стратегический анализ…………………………………………………………………………………………………………… 225

Осмысление предметной области……………………………………………………………………………….. 225

Основные поддомены (core subdomains)……………………………………………………………. 225

Универсальные поддомены…………………………………………………………………………………. 226

Вспомогательные поддомены (supporting subdomains)…………………………………….. 226

Изучение текущего проекта…………………………………………………………………………………………. 226

Оценка тактического замысла…………………………………………………………………………….. 227

Оценка стратегического замысла……………………………………………………………………….. 227

Определение стратегии модернизации………………………………………………………………………………….. 228

Стратегическая модернизация……………………………………………………………………………………. 228

Тактическая модернизация………………………………………………………………………………………….. 230

Развитие единого языка……………………………………………………………………………………………….. 230

Паттерн «Душитель» (Strangler)………………………………………………………………………….. 231

Рефакторинг тактических проектных решений…………………………………………………. 233

Прагматичное предметно-ориентированное проектирование……………………………………………. 234

Как «продать» предметно-ориентированное проектирование?………………………………………….. 234

Законспирированное предметно-ориентированное проектирование……………………… 235

Единый язык………………………………………………………………………………………………………….. 235

Ограниченные контексты…………………………………………………………………………………….. 236

Тактические проектные решения………………………………………………………………………… 236

Модель предметной области, основанная на событиях…………………………………… 237

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

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

Часть IV. Взаимоотношения с другими методологиями и паттернами     239

Глава 14. Микросервисы……………………………………………………………………… 240

Что такое сервис?…………………………………………………………………………………………………………………….. 240

Что такое микросервис?………………………………………………………………………………………………………….. 241

Метод как Сервис (Method as a Service): путь к созданию идеальных микросервисов? 242

Цель проектирования…………………………………………………………………………………………………… 243

Сложность системы……………………………………………………………………………………………………… 244

Микросервисы как «глубокие» сервисы (deep services)…………………………………………….. 245

Микросервисы как глубокие модули………………………………………………………………………….. 246

Предметно-ориентированное проектирование и границы микросервисов………………………… 248

Ограниченные контексты…………………………………………………………………………………………….. 248

Агрегаты……………………………………………………………………………………………………………….. 250

Поддомены……………………………………………………………………………………………………………………. 251

Сокращение публичных интерфейсов микросервисов…………………………………………………………. 252

Сервис с открытым протоколом………………………………………………………………………………….. 252

Предохранительный слой (anticorruption layer, ACL)……………………………………………….. 253

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

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

Глава 15. Событийно-ориентированная архитектура…………………………… 256

Событийно-ориентированная архитектура………………………………………………………………………….. 256

События……………………………………………………………………………………………………………………………………. 257

События, команды и сообщения…………………………………………………………………………………. 257

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

Типы событий……………………………………………………………………………………………………………….. 258

Уведомление…………………………………………………………………………………………………………. 258

Передача состояния с помощью события………………………………………………………….. 260

События предметной области (domain event)…………………………………………………… 262

Сравнение событий предметной области и уведомлений………………………………… 262

Сравнение событий предметной области с ECST-сообщениями…………………….. 262

Типы событий: Пример………………………………………………………………………………………… 263

Проектирование событийно-ориентированной интеграции……………………………………………….. 264

Распределенный большой ком грязи…………………………………………………………………………… 264

Временнáя связанность (связанность по времени)…………………………………………………….. 265

Функциональная связанность……………………………………………………………………………………… 266

Связанность на уровне реализации……………………………………………………………………………. 266

Реорганизация событийно-ориентированной интеграции……………………………………….. 266

Творческий подход к событийно-ориентированному проектированию…………………. 267

Предполагайте худшее………………………………………………………………………………………… 267

Используйте публичный интерфейс и приватные события……………………………… 268

Оценивайте требования к согласованности………………………………………………………. 268

Вывод………………………………………………………………………………………………………………………………………… 269

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

Глава 16. Сеть данных (Data Mesh)………………………………………………………. 271

Сравнение аналитической модели данных (OLAP) с моделью транзакционных данных (OLTP)        271

Таблица фактов…………………………………………………………………………………………………………….. 272

Таблица измерений………………………………………………………………………………………………………. 274

Аналитические модели………………………………………………………………………………………………… 274

Платформы управления аналитическими данными…………………………………………………………….. 276

Хранилище данных — Data Warehouse……………………………………………………………………… 276

Озеро данных — Data Lake…………………………………………………………………………………………. 279

Проблемы архитектур хранилища данных и озера данных……………………………………. 280

Сеть данных (Data mesh)………………………………………………………………………………………………………… 281

Разбиение данных по предметным областям…………………………………………………………….. 281

Данные как продукт……………………………………………………………………………………………………… 283

Обеспечение автономии………………………………………………………………………………………………. 284

Построение экосистемы……………………………………………………………………………………………….. 284

Совмещение сети данных (data mesh) и предметно-ориентированного проектирования          285

Вывод………………………………………………………………………………………………………………………………………… 287

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

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

Задача………………………………………………………………………………………………………………………………………. 289

Решение…………………………………………………………………………………………………………………………………….. 290

Реализация……………………………………………………………………………………………………………………………….. 291

Рекомендуемая литература…………………………………………………………………………………………………….. 291

Дополнительные сведения о предметно-ориентированном проектировании………… 291

Архитектурные и интеграционные шаблоны…………………………………………………………….. 292

Модернизация устаревших систем…………………………………………………………………………….. 292

EventStorming………………………………………………………………………………………………………………… 293

Вывод………………………………………………………………………………………………………………………………………… 294

Приложение 1. Применение DDD: пример из практики………………………… 295

Пять ограниченных контекстов………………………………………………………………………………………………. 295

Предметная область…………………………………………………………………………………………………….. 295

Ограниченный контекст № 1: Маркетинг…………………………………………………………………… 297

Своеобразная магия…………………………………………………………………………………………….. 297

Наши ранние взгляды на предметно-ориентированное проектирование………. 297

Ограниченный контекст № 2: CRM…………………………………………………………………………….. 297

Еще больше «агрегатов»!…………………………………………………………………………………….. 298

Разработка решения: Дубль два…………………………………………………………………………. 299

Вавилонская башня 2.0……………………………………………………………………………………….. 299

Более широкий взгляд на предметно-ориентированное проектирование………. 300

Ограниченный контекст № 3: Обработчики событий……………………………………………….. 301

Ограниченный контекст № 4: Бонусы………………………………………………………………………… 302

Проектирование: Дубль два………………………………………………………………………………… 303

Единый язык………………………………………………………………………………………………………….. 303

Классическое понимание предметно-ориентированного проектирования……. 303

Ограниченный контекст № 5: Центр маркетинга………………………………………………………. 304

Микро — что?………………………………………………………………………………………………………. 304

Реальная проблема………………………………………………………………………………………………. 305

Обсуждение………………………………………………………………………………………………………………………………. 305

Единый язык………………………………………………………………………………………………………………….. 305

Поддомены……………………………………………………………………………………………………………………. 306

Сопоставление проектных решений с поддоменами………………………………………… 307

Не игнорируйте боль……………………………………………………………………………………………. 308

Границы ограниченных контекстов……………………………………………………………………………. 308

Вывод………………………………………………………………………………………………………………………………………… 309

Приложение 2. Ответы на вопросы упражнений………………………………….. 310

Глава 1……………………………………………………………………………………………………………………………………… 310

Глава 2……………………………………………………………………………………………………………………………………… 311

Глава 3……………………………………………………………………………………………………………………………………… 311

Глава 4……………………………………………………………………………………………………………………………………… 312

Глава 5……………………………………………………………………………………………………………………………………… 312

Глава 6……………………………………………………………………………………………………………………………………… 313

Глава 7……………………………………………………………………………………………………………………………………… 313

Глава 8……………………………………………………………………………………………………………………………………… 313

Глава 9……………………………………………………………………………………………………………………………………… 314

Глава 10……………………………………………………………………………………………………………………………………. 314

Глава 11……………………………………………………………………………………………………………………………………. 314

Глава 12……………………………………………………………………………………………………………………………………. 315

Глава 13……………………………………………………………………………………………………………………………………. 315

Глава 14……………………………………………………………………………………………………………………………………. 315

Глава 15……………………………………………………………………………………………………………………………………. 315

Глава 16……………………………………………………………………………………………………………………………………. 316

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

Об авторе       320

Влад Хононов

Влад Хононов — инженер-программист, более 20 лет занимающийся промышленной разработкой. Успел поработать во множестве больших и малых компаний на разных позициях – от вебмастера до главного архитектора. Активно выступает на конференциях, пишет статьи в блоге, консультирует по темам, связанным с предметно-ориентированным проектированием, микросервисами, а также с программной архитектурой и унаследованным кодом.

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

Долгожданная книга: “Современная архитектура и устройство компьютеров. 2-е издание”

Современная архитектура и устройство компьютеров

Книга посвящена архитектуре и принципам работы современных цифровых устройств: компьютеров, смартфонов, облачных серверов. Подробно рассмотрены архитектуры процессоров и наборы инструкций x86, x64, ARM и RISC-V. Описано внутреннее устройство процессора, логические вентили, триггеры, регистры, конвейеры, показаны режимы адресации, обработка прерываний, представлены основы машинной логики, методы повышения вычислительной производительности процессоров. Приведен пример разработки процессора RISC-V на базе недорогой платы FPGA (ПЛИС). Описаны принципы виртуализации и технологии, лежащие в основе виртуальных машин, рассмотрены архитектурные решения для обеспечения кибербезопасности и конфиденциальности вычислений. Уделено внимание специализированным компьютерным архитектурам: облачным серверам, мобильным устройствам, процессорам для нейронных сетей и машинного обучения, блокчейна и майнинга, беспилотного транспорта. На практическом примере показаны квантовые вычисления, рассмотрены другие перспективные направления в вычислительных архитектурах.

 

Вы — разработчик программного обеспечения, системный архитектор или студент, изучающий устройство компьютеров?

Вы ищете издание, которое подробно познакомит вас с внутренней архитектурой и принципами работы цифровых устройств?

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

Из этой книги вы

  • узнаете об основах современных компьютерных систем;
  • подробно изучите устройство процессоров, включая логические вентили, триггеры, регистры, последовательную логику, обработку прерываний и конвейеры управления;
  • исследуете процессорные архитектуры и наборы инструкций, включая x86, x64, ARM и RISC-V;
  • узнаете, как реализовать процессор RISC-V на недорогой плате FPGA (ПЛИС);
  • напишете  программу для квантовых вычислений и запустите ее на реальном квантовом компьютере.

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

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

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

Составители.. 21

Об авторе. 21

О рецензентах. 21

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

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

Как организована эта книга. 24

Как получить максимальную отдачу от этой книги. 28

Загрузите файлы с примерами кода. 28

Загрузите цветные изображения. 28

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

Свяжитесь с нами. 29

Поделитесь своими мыслями. 30

Глава 1. Введение в архитектуру компьютеров.. 31

Технические требования. 32

Эволюция автоматических вычислительных устройств. 32

Аналитическая машина Чарльза Бэббиджа. 32

ENIAC.. 35

IBM PC.. 36

iPhone. 40

Закон Мура. 41

Архитектура компьютеров. 44

Представление чисел уровнями напряжения. 44

Двоичные и шестнадцатеричные числа. 45

Микропроцессор 6502. 49

Набор инструкций микропроцессора 6502. 52

Резюме. 55

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

Глава 2. Цифровая логика.. 58

Технические требования. 59

Электрические схемы.. 59

Транзистор. 60

Логические вентили. 61

Защелки. 66

Триггеры.. 69

Регистры.. 71

Сумматоры.. 73

Задержка распространения. 74

Синхронизация. 76

Последовательностная логика. 77

Языки описания аппаратных средств. 78

VHDL. 78

Резюме. 83

Упражнения. 83

Глава 3. Элементы процессора.. 85

Технические требования. 86

Простой процессор. 86

Устройство управления. 87

Арифметико-логическое устройство. 90

Регистры.. 95

Набор инструкций процессора. 97

Режимы адресации. 98

Режим непосредственной адресации. 98

Режим абсолютной адресации. 99

Режим абсолютной индексной адресации. 100

Режим косвенной индексной адресации. 102

Категории инструкций. 103

Инструкции загрузки и сохранения. 104

Инструкции передачи данных из регистра в регистр. 104

Инструкции стека. 104

Арифметические инструкции. 105

Логические инструкции. 106

Инструкции ветвления. 106

Инструкции вызова подпрограммы и возврата из подпрограммы.. 107

Инструкции для работы с флагами процессора. 107

Инструкции для работы с прерываниями. 107

Инструкция отсутствия операций. 108

Обработка прерываний. 108

Обработка ……. 108

Обработка …….. 110

Обработка инструкции BRK.. 111

Операции ввода-вывода. 112

Программируемый ввод-вывод. 114

Ввод-вывод с управлением по прерываниям.. 114

Прямой доступ к памяти. 116

Резюме. 116

Упражнения. 117

Глава 4. Компоненты компьютерной системы… 119

Технические требования. 120

Подсистема памяти. 120

Знакомство с полевыми МОП-транзисторами. 121

Построение схем динамической памяти с помощью полевых
МОП-транзисторов. 124

Конденсатор. 124

Битовая ячейка динамической памяти. 126

SDRAM DDR5. 128

DDR для графики. 131

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

Подсистема ввода-вывода. 132

Параллельные и последовательные шины данных. 133

PCI Express. 135

SATA.. 137

M.2. 138

USB.. 138

Thunderbolt 139

Графические дисплеи. 140

VGA.. 141

DVI 141

HDMI 142

DisplayPort 142

Сетевой интерфейс. 143

Ethernet 143

Wi-Fi 144

Клавиатура и мышь. 146

Клавиатура. 146

Мышь. 147

Технические характеристики современной компьютерной системы.. 148

Резюме. 149

Упражнения. 150

Глава 5. Аппаратно-программный интерфейс.. 151

Технические требования. 152

Драйверы устройств. 152

Параллельный порт. 153

Драйверы устройств PCIe. 155

Структура драйверов устройств. 156

Базовая система ввода-вывода (BIOS) 158

Единый расширяемый интерфейс встроенного ПО (UEFI) 160

Процесс загрузки операционной системы.. 162

Загрузка при использовании BIOS. 163

Загрузка при использовании UEFI 163

Доверенная загрузка. 164

Мобильные устройства. 165

Операционные системы.. 166

Процессы и потоки. 168

Алгоритмы планирования и приоритет процесса. 171

Многопроцессорность. 175

Резюме. 177

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

Глава 6. Специализированные вычисления.. 179

Технические требования. 180

Вычисления в реальном времени. 180

Операционные системы реального времени. 182

Цифровая обработка сигналов. 186

АЦП и ЦАП.. 186

Особенности аппаратных средств DSP. 189

Алгоритмы обработки сигналов. 192

Обработка данных в графических процессорах. 197

Графические процессоры как процессоры обработки данных. 198

Примеры специализированных архитектур. 202

Резюме. 204

Упражнения. 204

Глава 7. Архитектура процессора и памяти.. 207

Технические требования. 207

Фон-неймановская, гарвардская и модифицированная гарвардская
архитектуры.. 208

Фон-неймановская архитектура. 208

Гарвардская архитектура. 210

Модифицированная гарвардская архитектура. 211

Физическая и виртуальная память. 212

Виртуальная память со страничной организацией. 216

Биты состояния страницы.. 220

Пулы памяти. 222

Блок управления памятью.. 223

Резюме. 226

Упражнения. 227

Глава 8. Методы повышения производительности.. 229

Технические требования. 230

Кеш-память. 230

Многоуровневое кеширование в процессорах. 232

Статическая оперативная память. 233

Кеш первого уровня. 235

Кеш с прямым отображением.. 235

Наборно-ассоциативный кеш.. 239

Полностью ассоциативный кеш.. 241

Политики записи в кеш процессора. 242

Кеши процессора второго и третьего уровней. 243

Конвейерная обработка инструкций. 245

Суперконвейеризация. 248

Конфликты конвейеризации. 250

Микрооперации и переименование регистров. 252

Условное ветвление. 253

Одновременная многопоточность. 254

Модель обработки SIMD.. 256

Резюме. 258

Упражнения. 258

Глава 9. Специализированные расширения процессоров.. 260

Технические требования. 260

Привилегированные режимы процессора. 261

Обработка прерываний и исключений. 261

Кольца защиты.. 265

Режим супервизора и режим пользователя. 267

Системные вызовы.. 268

Арифметика с плавающей запятой. 269

Сопроцессор 8087 для вычислений с плавающей запятой. 272

Стандарт вычислений с плавающей запятой IEEE 754. 274

Управление питанием.. 275

Динамическое изменение напряжения и частоты.. 276

Управление безопасностью системы.. 277

Доверенный платформенный модуль. 280

Противодействие кибератакам.. 281

Резюме. 282

Упражнения. 283

Глава 10. Современные архитектуры и наборы инструкций
процессоров.. 285

Технические требования. 285

Архитектура и набор инструкций x86. 286

Набор регистров архитектуры x86. 288

Режимы адресации x86. 292

Категории инструкций x86. 295

Форматы инструкций x86. 300

Язык ассемблера x86. 301

Архитектура и набор инструкций x64. 304

Набор регистров архитектуры x64. 306

Категории и форматы инструкций x64. 307

Язык ассемблера x64. 307

Архитектура и набор инструкций 32-разрядных процессоров ARM.. 310

Набор регистров ARM.. 312

Режимы адресации ARM.. 313

Категории инструкций ARM.. 316

32-разрядный язык ассемблера ARM.. 319

Архитектура и набор инструкций 64-разрядных процессоров ARM.. 321

64-разрядный язык ассемблера ARM.. 323

Резюме. 325

Упражнения. 325

Глава 11. Архитектура и набор инструкций RISC-V.. 328

Технические требования. 329

Архитектура и приложения RISC-V.. 329

Базовый набор инструкций RISC-V.. 332

Вычислительные инструкции. 333

Инструкции потока управления. 334

Инструкции доступа к памяти. 334

Системные инструкции. 335

Псевдоинструкции. 336

Уровни привилегий. 338

Расширения RISC-V.. 340

Расширение M.. 340

Расширение A.. 341

Расширение C.. 342

Расширения F и D.. 342

Другие расширения. 343

Варианты RISC-V.. 344

64-разрядная архитектура RISC-V.. 345

Стандартные конфигурации RISC-V.. 346

Язык ассемблера RISC-V.. 347

Реализация концепции RISC-V в ПЛИС.. 348

Резюме. 352

Упражнения. 353

Глава 12. Виртуализация процессоров.. 355

Технические требования. 356

Введение в виртуализацию.. 356

Типы виртуализации. 356

Категории виртуализации процессоров. 360

Проблемы виртуализации. 365

Небезопасные инструкции. 366

Теневые таблицы страниц. 367

Безопасность. 367

Виртуализация современных процессоров. 368

Виртуализация процессоров x86. 368

Виртуализация процессоров ARM.. 370

Виртуализация процессоров RISC-V.. 371

Инструменты виртуализации. 372

VirtualBox. 372

VMware Workstation. 373

VMware ESXi 373

KVM.. 373

Xen. 374

QEMU.. 374

Виртуализация и облачные вычисления. 375

Потребление электроэнергии. 376

Резюме. 376

Упражнения. 377

Глава 13. Специализированные компьютерные архитектуры    378

Технические требования. 378

Проектирование архитектуры компьютерных систем на основе
уникальных требований. 379

Архитектура смартфона. 380

iPhone 13 Pro Max. 381

Архитектура персонального компьютера. 384

Игровой настольный компьютер Alienware Aurora Ryzen Edition R10. 384

Вычислительная архитектура масштаба центра обработки данных. 389

Аппаратные средства WSC.. 390

Стоечные серверы.. 392

Управление отказами аппаратных средств. 395

Потребление электроэнергии. 395

WSC как многоуровневый информационный кеш.. 396

Развертывание облачного приложения. 397

Архитектура процессоров для нейронных сетей и машинного обучения. 401

Нейропроцессор Intel Nervana. 401

Резюме. 405

Упражнения. 405

Глава 14. Архитектуры для обеспечения кибербезопасности и конфиденциальности вычислений.. 407

Технические требования. 408

Угрозы кибербезопасности. 408

Категории угроз кибербезопасности. 408

Методы кибератак. 410

Типы вредоносного программного обеспечения. 412

Действия после проникновения. 414

Особенности защищенного оборудования. 416

Определите, что нуждается в защите. 416

Рассматривайте все типы атак. 417

Особенности конструкции защищенных систем.. 419

Конфиденциальные вычисления. 422

Меры безопасности на уровне архитектуры.. 425

Избегайте защиты посредством сокрытия информации. 425

Комплексный подход к безопасному проектированию.. 427

Принцип наименьших привилегий. 427

Архитектура нулевого доверия. 428

Обеспечение безопасности системного и прикладного ПО.. 429

Общие слабые места программного обеспечения. 430

Проверка безопасности исходного кода. 433

Резюме. 433

Упражнения. 434

Глава 15. Архитектуры блокчейна и майнинга биткоинов.. 436

Технические требования. 437

Введение в блокчейн и биткоин. 437

Алгоритм хеширования SHA-256. 441

Вычисление хеша SHA-256. 443

Программное обеспечение Bitcoin Core. 444

Процесс майнинга биткоинов. 445

Пулы майнинга биткоинов. 447

Майнинг с помощью центрального процессора. 449

Майнинг с помощью графического процессора. 450

Компьютерные архитектуры для майнинга биткоинов. 451

Майнинг с помощью ПЛИС.. 453

Майнинг с помощью ASIC.. 455

Экономика майнинга биткоинов. 458

Альтернативные виды криптовалют. 459

Резюме. 460

Упражнения. 461

Глава 16. Архитектуры для самоуправляемых автомобилей   462

Технические требования. 463

Обзор самоуправляемых автомобилей. 463

Уровни автономности вождения. 464

Аспекты безопасности самоуправляемых автомобилей. 466

Требования к аппаратным средствам и программному обеспечению для самоуправляемых автомобилей  468

Наблюдение за состоянием транспортного средства и его окружением.. 469

Распознавание окружающей обстановки. 473

Принятие решений. 484

Вычислительная архитектура автономного транспортного средства. 486

Автопилот Tesla HW3. 487

Резюме. 489

Упражнения. 489

Глава 17. Квантовые вычисления и другие перспективные
направления в вычислительных архитектурах.. 491

Технические требования. 492

Текущее развитие компьютерных архитектур. 492

Экстраполяция современных тенденций в будущее. 494

Закон Мура — новый взгляд. 494

Третье измерение. 495

Распространение специализированных устройств. 496

Потенциально прорывные технологии. 497

Квантовая физика. 497

Спинтроника. 498

Квантовые вычисления. 500

Квантовый взлом кода. 501

Адиабатические квантовые вычисления. 502

Будущее квантовых вычислений. 503

Углеродные нанотрубки. 504

Формирование набора навыков с заделом на будущее. 506

Непрерывное обучение. 506

Высшее образование. 508

Конференции и литература. 509

Резюме. 510

Упражнения. 513

Приложение. Ответы к упражнениям… 515

Глава 1. Введение в архитектуру компьютеров. 515

Упражнение 1. 515

Упражнение 2. 517

Упражнение 3. 521

Упражнение 4. 525

Упражнение 5. 526

Упражнение 6. 528

Глава 2. Цифровая логика. 530

Упражнение 1. 530

Упражнение 2. 530

Упражнение 3. 531

Упражнение 4. 533

Упражнение 5. 534

Упражнение 6. 536

Глава 3. Элементы процессора. 539

Упражнение 1. 539

Упражнение 2. 540

Упражнение 3. 540

Упражнение 4. 541

Упражнение 5. 543

Упражнение 6. 545

Глава 4. Компоненты компьютерной системы.. 551

Упражнение 1. 551

Упражнение 2. 552

Глава 5. Аппаратно-программный интерфейс. 552

Упражнение 1. 552

Упражнение 2. 553

Глава 6. Специализированные вычисления. 554

Упражнение 1. 554

Упражнение 2. 555

Упражнение 3. 557

Глава 7. Архитектура процессоров и памяти. 558

Упражнение 1. 558

Упражнение 2. 558

Упражнение 3. 559

Глава 8. Методы повышения производительности. 561

Упражнение 1. 561

Упражнение 2. 562

Упражнение 3. 562

Глава 9. Специализированные расширения процессоров. 563

Упражнение 1. 563

Упражнение 2. 565

Упражнение 3. 569

Упражнение 4. 569

Упражнение 5. 570

Упражнение 6. 570

Упражнение 7. 570

Упражнение 8. 571

Глава 10. Современные архитектуры и наборы инструкций процессоров. 571

Упражнение 1. 571

Упражнение 2. 575

Упражнение 3. 580

Упражнение 4. 583

Упражнение 5. 588

Упражнение 6. 590

Упражнение 7. 595

Упражнение 8. 598

Глава 11. Архитектура и набор инструкций RISC-V.. 604

Упражнение 1. 604

Упражнение 2. 604

Упражнение 3. 606

Глава 12. Виртуализация процессоров. 609

Упражнение 1. 609

Упражнение 2. 611

Упражнение 3. 613

Глава 13. Специализированные компьютерные архитектуры.. 614

Упражнение 1. 614

Упражнение 2. 615

Глава 14. Архитектуры для обеспечения кибербезопасности и конфиденциальности вычислений  617

Упражнение 1. 617

Упражнение 2. 618

Упражнение 3. 618

Глава 15. Архитектуры блокчейна и майнинга биткоинов. 619

Упражнение 1. 619

Упражнение 2. 621

Глава 16. Архитектуры для самоуправляемых автомобилей. 622

Упражнение 1. 622

Упражнение 2. 623

Упражнение 3. 625

Упражнение 4. 629

Глава 17. Квантовые вычисления и другие перспективные направления
в вычислительных архитектурах. 633

Упражнение 1. 633

Упражнение 2. 634

Упражнение 3. 635

Упражнение 4. 637

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

Ледин Джим

Джим Ледин (Jim Ledin) — исполнительный директор компании Ledin Engineering, Inc. Джим является экспертом в области проектирования и тестирования встроенного программного обеспечения и аппаратных средств, а также экспертом в области оценки кибербезопасности систем и тестирования на проникновение. Джим имеет степень бакалавра в области аэрокосмической техники от Университета штата Айова и степень мастера в области электротехники и вычислительной техники от Технологического института Джорджии. Он является зарегистрированным профессиональным инженером-электриком в штате Калифорния, сертифицированным специалистом по безопасности информационных систем (Certified InformationSystem Security Professional, CISSP), сертифицированным этичным хакером (CertifiedEthical Hacker, CEH) и сертифицированным специалистом

 

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

Долгожданная книга “Реализация полезных алгоритмов на C++”

Реализация полезных алгоритмов на C++

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

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

Желаю, чтобы мое желание не исполнилось.
 Дуглас Хофштадтер

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

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

и другим.

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

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

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

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

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

  1. С чего всё начинается………………………………………………………………………… 21

1.1. Введение………………………………………………………………………………………………………………………………. 21

1.2. Каким должен быть алгоритм?………………………………………………………………………………………….. 21

1.3. Логика принятия решений………………………………………………………………………………………………….. 23

1.4. Доказательство базовой правильности…………………………………………………………………………….. 25

1.5. Асимптотическая запись…………………………………………………………………………………………………….. 27

1.6. Машинные модели……………………………………………………………………………………………………………… 27

1.7. Рандомизированные алгоритмы………………………………………………………………………………………… 29

1.8. Измерение эффективности………………………………………………………………………………………………….. 29

1.9. Типы данных……………………………………………………………………………………………………………………….. 30

1.10. Эксперименты с алгоритмами…………………………………………………………………………………………. 32

1.11. Управление памятью………………………………………………………………………………………………………… 33

1.12. Оптимизация кода…………………………………………………………………………………………………………….. 34

1.13. Рекурсия…………………………………………………………………………………………………………………………….. 36

1.14. Стратегии вычислений……………………………………………………………………………………………………… 37

1.15. Выбор среди нескольких алгоритмов……………………………………………………………………………… 37

1.16. Создание параллельных алгоритмов……………………………………………………………………………… 38

1.17. Реализация алгоритмов……………………………………………………………………………………………………. 39

1.18. Рекомендуемые курсы для студентов, изучающих информатику………………………………… 40

1.19. Некоторые стратегии обучения………………………………………………………………………………………. 42

1.20. О проектах всей книги………………………………………………………………………………………………………. 43

1.21. Список рекомендуемой литературы……………………………………………………………………………….. 44

  1. Основы разработки программного обеспечения…………………………………. 45

2.1. Введение………………………………………………………………………………………………………………………………. 45

2.2. Обзор цикла разработки…………………………………………………………………………………………………….. 45

2.3. Требования………………………………………………………………………………………………………………………….. 46

2.4. Проектирование структуры компонентов………………………………………………………………………… 47

2.5. Проектирование отдельных компонентов и написание кода…………………………………………. 47

2.6. Шаблоны……………………………………………………………………………………………………………………………… 48

2.7. Управление ошибками……………………………………………………………………………………………………….. 52

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

2.9. Просмотр кода…………………………………………………………………………………………………………………….. 56

2.10. Релиз…………………………………………………………………………………………………………………………………… 56

2.11. Обслуживание…………………………………………………………………………………………………………………… 57

2.12. Оценка………………………………………………………………………………………………………………………………… 58

2.13. Следование формальному процессу……………………………………………………………………………….. 58

2.14. Управление данными пользователя………………………………………………………………………………… 59

2.15. Список рекомендуемой литературы……………………………………………………………………………….. 59

  1. Советы по вопросам карьерного роста ипрохождения собеседований.. 60

3.1. Введение………………………………………………………………………………………………………………………………. 60

3.2. Отклик на вакансию……………………………………………………………………………………………………………. 60

3.3. Составление резюме…………………………………………………………………………………………………………… 60

3.4. Поведенческие вопросы и собеседования………………………………………………………………………… 61

3.5. Технические собеседования………………………………………………………………………………………………. 63

3.6. Более сложные вопросы…………………………………………………………………………………………………….. 67

3.7. Собеседование по проектированию систем……………………………………………………………………… 68

3.8. Обсуждение предложения………………………………………………………………………………………………….. 68

3.9. Как красиво уйти с текущей работы?……………………………………………………………………………….. 69

3.10. Боритесь с самуспокоенностью………………………………………………………………………………………. 69

3.11. Советы по дополнительной подготовке………………………………………………………………………….. 70

3.12. Список рекомендуемой литературы……………………………………………………………………………….. 70

  1. Основы компьютерного права……………………………………………………………. 71

4.1. Введение………………………………………………………………………………………………………………………………. 71

4.2. Интеллектуальная собственность……………………………………………………………………………………… 71

4.3. Патенты……………………………………………………………………………………………………………………………….. 72

4.4. Коммерческие тайны………………………………………………………………………………………………………….. 73

4.5. Авторские права………………………………………………………………………………………………………………….. 74

4.6. Товарные знаки…………………………………………………………………………………………………………………… 75

4.7. Управление интеллектуальной собственностью……………………………………………………………… 76

4.8. Контракты……………………………………………………………………………………………………………………………. 76

4.9. Лицензии………………………………………………………………………………………………………………………………. 77

4.10. Трудовые соглашения………………………………………………………………………………………………………. 78

4.11. Конфиденциальность……………………………………………………………………………………………………….. 79

4.12. Киберпреступления………………………………………………………………………………………………………….. 80

4.13. Выступления в качестве свидетеля-эксперта…………………………………………………………………. 80

4.14. Советы по дополнительной подготовке………………………………………………………………………….. 81

4.15. Список рекомендуемой литературы……………………………………………………………………………….. 81

  1. Фундаментальные структуры данных………………………………………………… 82

5.1. Введение………………………………………………………………………………………………………………………………. 82

5.2. Вспомогательные функции………………………………………………………………………………………………… 82

5.3. Вектор………………………………………………………………………………………………………………………………….. 88

5.4. Блочный массив………………………………………………………………………………………………………………….. 92

5.5. Связанный список……………………………………………………………………………………………………………….. 93

5.6. Свободный список со сборкой мусора……………………………………………………………………………… 97

5.7. Стек…………………………………………………………………………………………………………………………………….. 101

5.8. Очередь………………………………………………………………………………………………………………………………. 102

5.9. Деревья………………………………………………………………………………………………………………………………. 105

5.10. Битовые алгоритмы………………………………………………………………………………………………………… 106

5.11. Набор битов…………………………………………………………………………………………………………………….. 109

5.12. Поиск объединения…………………………………………………………………………………………………………. 115

5.13. Примечания по реализации……………………………………………………………………………………………. 116

5.14. Комментарии…………………………………………………………………………………………………………………… 116

5.15. Советы по дополнительной подготовке……………………………………………………………………….. 117

5.16. Список рекомендуемой литературы……………………………………………………………………………… 117

  1. Генерация случайных чисел……………………………………………………………… 118

6.1. Введение…………………………………………………………………………………………………………………………….. 118

6.2. Краткий обзор теории вероятностей………………………………………………………………………………. 118

6.3. Генерация псевдослучайных чисел………………………………………………………………………………… 120

6.4. Класс генераторов псевдослучайных чисел Xorshift……………………………………………………. 122

6.5. Вихрь Мерсенна……………………………………………………………………………………………………………….. 123

6.6. Генератор MRG32k3a………………………………………………………………………………………………………. 123

6.7. Алгоритм RC4……………………………………………………………………………………………………………………. 125

6.8. Выбор генератора…………………………………………………………………………………………………………….. 126

6.9. Использование генератора………………………………………………………………………………………………. 127

6.10. Создание выборок из распределений……………………………………………………………………………. 127

6.11. Генерация выборок из дискретных распределений с ограниченным диапазоном…… 129

6.12. Генерация выборок из особых распределений……………………………………………………………. 133

6.13. Генерация случайных объектов……………………………………………………………………………………. 137

6.14. Генерация выборок из многомерных распределений………………………………………………….. 139

6.15. Метод Монте-Карло………………………………………………………………………………………………………. 140

6.16. Примечания по реализации……………………………………………………………………………………………. 146

6.17. Комментарии…………………………………………………………………………………………………………………… 147

6.18. Советы по дополнительной подготовке……………………………………………………………………….. 147

6.19. Список рекомендуемой литературы……………………………………………………………………………… 148

  1. Сортировка………………………………………………………………………………………. 149

7.1. Введение…………………………………………………………………………………………………………………………….. 149

7.2. Сортировка вставками……………………………………………………………………………………………………… 149

7.3. Быстрая сортировка…………………………………………………………………………………………………………. 150

7.4. Сортировка слиянием……………………………………………………………………………………………………….. 153

7.5. Целочисленная сортировка……………………………………………………………………………………………… 154

7.6. Векторная сортировка……………………………………………………………………………………………………… 155

7.7. Сортировка перестановкой……………………………………………………………………………………………… 158

7.8. Выбор…………………………………………………………………………………………………………………………………. 159

7.9. Множественный выбор…………………………………………………………………………………………………….. 160

7.10. Поиск………………………………………………………………………………………………………………………………… 161

7.11. Примечания по реализации……………………………………………………………………………………………. 161

7.12. Комментарии…………………………………………………………………………………………………………………… 162

7.13. Советы по дополнительной подготовке……………………………………………………………………….. 163

7.14. Список рекомендуемой литературы……………………………………………………………………………… 163

  1. Динамически сортируемые последовательности……………………………….. 164

8.1. Введение…………………………………………………………………………………………………………………………….. 164

8.2. Требования………………………………………………………………………………………………………………………… 164

8.3. Список с пропусками………………………………………………………………………………………………………… 165

8.4. Декартово дерево……………………………………………………………………………………………………………… 170

8.5. Итераторы деревьев………………………………………………………………………………………………………….. 176

8.6. Дополнения и варианты API……………………………………………………………………………………………. 178

8.7. Векторные ключи……………………………………………………………………………………………………………… 179

8.8. Расширение LCP для деревьев…………………………………………………………………………………………. 179

8.9. Префиксное дерево……………………………………………………………………………………………………………. 185

8.10. Тернарное декартово дерево…………………………………………………………………………………………. 186

8.11. Сравнение производительности……………………………………………………………………………………. 191

8.12. Примечания по реализации……………………………………………………………………………………………. 192

8.13. Комментарии…………………………………………………………………………………………………………………… 192

8.14. Советы по дополнительной подготовке……………………………………………………………………….. 194

8.15. Список рекомендуемой литературы……………………………………………………………………………… 194

  1. Хеширование……………………………………………………………………………………. 196

9.1. Введение…………………………………………………………………………………………………………………………….. 196

9.2. Хеш-функции……………………………………………………………………………………………………………………… 196

9.3. Универсальные хеш-функции………………………………………………………………………………………….. 200

9.4. Неуниверсальные хеш-функции………………………………………………………………………………………. 203

9.5. Скользящие хеш-функции………………………………………………………………………………………………… 205

9.6. Коллекция хеш-функций…………………………………………………………………………………………………… 206

9.7. Хеш-таблицы…………………………………………………………………………………………………………………….. 206

9.8. Цепочка хеш-таблиц…………………………………………………………………………………………………………. 206

9.9. Хеш-таблица с линейным зондированием……………………………………………………………………… 211

9.10. Оценка времени……………………………………………………………………………………………………………….. 215

9.11. Фильтр Блума………………………………………………………………………………………………………………….. 216

9.12. Примечания по реализации……………………………………………………………………………………………. 217

9.13. Комментарии…………………………………………………………………………………………………………………… 218

9.14. Советы по дополнительной подготовке……………………………………………………………………….. 219

9.15. Список рекомендуемой литературы……………………………………………………………………………… 219

  1. Приоритетные очереди……………………………………………………………………. 221

10.1. Введение………………………………………………………………………………………………………………………….. 221

10.2. API……………………………………………………………………………………………………………………………………. 221

10.3. Бинарная куча…………………………………………………………………………………………………………………. 221

10.4. Индексированные кучи…………………………………………………………………………………………………… 224

10.5. Примечания по реализации……………………………………………………………………………………………. 229

10.6. Комментарии…………………………………………………………………………………………………………………… 229

10.7. Список рекомендуемой литературы……………………………………………………………………………… 230

  1. Алгоритмы графов………………………………………………………………………….. 231

11.1. Введение………………………………………………………………………………………………………………………….. 231

11.2. Основы……………………………………………………………………………………………………………………………… 231

11.3. Представление графов……………………………………………………………………………………………………. 232

11.4. Поиск………………………………………………………………………………………………………………………………… 235

11.5. Примеры задач поиска…………………………………………………………………………………………………… 237

11.6. Минимальное остовное дерево……………………………………………………………………………………… 239

11.7. Кратчайшие пути……………………………………………………………………………………………………………. 240

11.8. Алгоритмы потока………………………………………………………………………………………………………….. 243

11.9. Двудольное сопоставление……………………………………………………………………………………………. 247

11.10. Устойчивое сопоставление………………………………………………………………………………………….. 248

11.11. Задача назначения……………………………………………………………………………………………………….. 249

11.12. Генерация случайных графов……………………………………………………………………………………… 250

11.13. Примечания по реализации…………………………………………………………………………………………. 251

11.14. Комментарии…………………………………………………………………………………………………………………. 251

11.15. Советы по дополнительной подготовке……………………………………………………………………… 252

11.16. Список рекомендуемой литературы…………………………………………………………………………… 252

  1. Разные алгоритмы и методы…………………………………………………………… 253

12.1. Введение………………………………………………………………………………………………………………………….. 253

12.2. Превращение статических структур данных в динамические……………………………………. 253

12.3. Обеспечение устойчивости структур данных……………………………………………………………… 254

12.4. Хранение кеша………………………………………………………………………………………………………………… 255

12.5. Вектор с k-битным размером слова………………………………………………………………………………. 258

12.6. Объединение множества на интервалах………………………………………………………………………. 259

12.7. Создание первых N простых чисел……………………………………………………………………………….. 259

12.8. Генерация всех возможных перестановок……………………………………………………………………. 260

12.9. Генерация всех возможных сочетаний…………………………………………………………………………. 261

12.10. Генерация всех подмножеств………………………………………………………………………………………. 262

12.11. Создание всех разделов……………………………………………………………………………………………….. 262

12.12. Генерация всех зависимых объектов………………………………………………………………………….. 263

12.13. Примечания по реализации…………………………………………………………………………………………. 263

12.14. Комментарии…………………………………………………………………………………………………………………. 263

12.15. Советы по дополнительной подготовке……………………………………………………………………… 264

12.16. Список рекомендуемой литературы…………………………………………………………………………… 264

  1. Алгоритмы для работы с внешней памятью……………………………………. 265

13.1. Введение………………………………………………………………………………………………………………………….. 265

13.2. Диски и файлы…………………………………………………………………………………………………………………. 265

13.3. Структура файла…………………………………………………………………………………………………………….. 268

13.4. Работа с файлами CSV…………………………………………………………………………………………………… 269

13.5. Модель ввода/вывода…………………………………………………………………………………………………….. 273

13.6. Вектор внешней памяти………………………………………………………………………………………………….. 277

13.7. Сортировка……………………………………………………………………………………………………………………… 280

13.8. Векторные структуры данных………………………………………………………………………………………. 282

13.9. Дерево B+………………………………………………………………………………………………………………………… 283

13.10. Комментарии…………………………………………………………………………………………………………………. 291

13.11. Советы по дополнительной подготовке……………………………………………………………………… 291

13.12. Список рекомендуемой литературы…………………………………………………………………………… 292

  1. Строковые алгоритмы…………………………………………………………………….. 293

14.1. Введение………………………………………………………………………………………………………………………….. 293

14.2. Поиск по одному шаблону…………………………………………………………………………………………….. 293

14.3. Поиск по нескольким шаблонам……………………………………………………………………………………. 296

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

14.5. Расширенные шаблоны………………………………………………………………………………………………….. 299

14.6. Алгоритмы поиска расстояния между строками…………………………………………………………. 301

14.7. Обратный индекс…………………………………………………………………………………………………………….. 305

14.8. Суффиксный индекс………………………………………………………………………………………………………… 306

14.9. Синтаксическое дерево………………………………………………………………………………………………….. 310

14.10. Введение в краткие структуры данных………………………………………………………………………. 310

14.11. Примечания по реализации…………………………………………………………………………………………. 314

14.12. Комментарии…………………………………………………………………………………………………………………. 315

14.13. Советы по дополнительной подготовке……………………………………………………………………… 315

14.14. Список рекомендуемой литературы…………………………………………………………………………… 316

  1. Сжатие……………………………………………………………………………………………. 317

15.1. Введение………………………………………………………………………………………………………………………….. 317

15.2. Основные ограничения…………………………………………………………………………………………………… 317

15.3. Энтропия………………………………………………………………………………………………………………………….. 317

15.4. Битовый поток…………………………………………………………………………………………………………………. 318

15.5. Коды…………………………………………………………………………………………………………………………………. 320

15.6. Статические коды…………………………………………………………………………………………………………… 320

15.7. Коды Хаффмана……………………………………………………………………………………………………………… 324

15.8. Сжатие словаря………………………………………………………………………………………………………………. 328

15.9. Кодирование серий байтов……………………………………………………………………………………………. 331

15.10. Перемещение на передний план………………………………………………………………………………….. 332

15.11. Преобразование Берроуза — Уилера…………………………………………………………………………. 333

15.12. Примечания по реализации…………………………………………………………………………………………. 336

15.13. Комментарии…………………………………………………………………………………………………………………. 336

15.14. Советы по дополнительной подготовке……………………………………………………………………… 337

15.15. Список рекомендуемой литературы…………………………………………………………………………… 337

  1. Комбинаторная оптимизация………………………………………………………….. 338

16.1. Введение………………………………………………………………………………………………………………………….. 338

16.2. Теория сложности…………………………………………………………………………………………………………… 338

16.3. Типичные сложные задачи…………………………………………………………………………………………….. 340

16.4. Алгоритмы приближения……………………………………………………………………………………………….. 344

16.5. Эвристика жадного построения…………………………………………………………………………………….. 345

16.6. Ветвление и границы………………………………………………………………………………………………………. 346

16.7. Поиск крачайшего пути в пространстве с нижними границами…………………………………. 352

16.8. Локальный поиск…………………………………………………………………………………………………………….. 360

16.9. Применение локального поиска к некоторым задачам……………………………………………….. 366

16.10. Алгоритм имитации отжига…………………………………………………………………………………………. 370

16.11. Повторный локальный поиск………………………………………………………………………………………. 375

16.12. Генетические алгоритмы……………………………………………………………………………………………… 377

16.13. Анализ производительности………………………………………………………………………………………… 383

16.14. Подготовка данных для конкретной задачи………………………………………………………………. 384

16.15. Многоцелевая оптимизация…………………………………………………………………………………………. 384

16.16. Обработка ограничений………………………………………………………………………………………………. 385

16.17. Стохастические задачи………………………………………………………………………………………………… 390

16.18. Общие рекомендации……………………………………………………………………………………………………. 390

16.19. Примечания по реализации…………………………………………………………………………………………. 391

16.20. Комментарии…………………………………………………………………………………………………………………. 391

16.21. Советы по дополнительной подготовке……………………………………………………………………… 394

16.22. Список рекомендуемой литературы…………………………………………………………………………… 395

  1. Большие числа………………………………………………………………………………… 397

17.1. Введение………………………………………………………………………………………………………………………….. 397

17.2. Представление………………………………………………………………………………………………………………… 397

17.3. Сложение и вычитание…………………………………………………………………………………………………… 399

17.4. Операции сдвига……………………………………………………………………………………………………………… 400

17.5. Умножение………………………………………………………………………………………………………………………. 401

17.6. Деление……………………………………………………………………………………………………………………………. 402

17.7. Преобразование в десятичное число…………………………………………………………………………….. 404

17.8. Возведение в степень………………………………………………………………………………………………………. 404

17.9. Вычисление логарифма………………………………………………………………………………………………….. 405

17.10. Целочисленный квадратный корень…………………………………………………………………………… 405

17.11. Наибольший общий делитель……………………………………………………………………………………… 406

17.12. Модульная инверсия…………………………………………………………………………………………………….. 406

17.13. Проверка числа на простоту……………………………………………………………………………………….. 407

17.14. Рациональные числа…………………………………………………………………………………………………….. 408

17.15. Примечания по реализации…………………………………………………………………………………………. 410

17.16. Комментарии…………………………………………………………………………………………………………………. 410

17.17. Советы по дополнительной подготовке……………………………………………………………………… 411

17.18. Список рекомендуемой литературы…………………………………………………………………………… 411

  1. Вычислительная геометрия…………………………………………………………….. 412

18.1. Введение………………………………………………………………………………………………………………………….. 412

18.2. Расстояния……………………………………………………………………………………………………………………….. 412

18.3. VP-дерево…………………………………………………………………………………………………………………………. 413

18.4. k-d-дерево………………………………………………………………………………………………………………………… 417

18.5. Решение задач при большом числе измерений…………………………………………………………….. 422

18.6. Структуры данных для геометрических объектов………………………………………………………. 423

18.7. Точки………………………………………………………………………………………………………………………………… 423

18.8. Геометрические примитивы…………………………………………………………………………………………… 424

18.9. Выпуклая оболочка………………………………………………………………………………………………………… 425

18.10. Развертка плоскости…………………………………………………………………………………………………….. 426

18.11. Комментарии…………………………………………………………………………………………………………………. 427

18.12. Советы по дополнительной подготовке……………………………………………………………………… 428

18.13. Список рекомендуемой литературы…………………………………………………………………………… 428

  1. Обнаружение и исправление ошибок……………………………………………… 429

19.1. Введение………………………………………………………………………………………………………………………….. 429

19.2. Бинарные полиномы………………………………………………………………………………………………………. 429

19.3. Многочлены над конечными полями……………………………………………………………………………. 429

19.4. Обнаружение ошибок…………………………………………………………………………………………………….. 430

19.5. Каналы и коды………………………………………………………………………………………………………………… 432

19.6. Вычисление конечного поля………………………………………………………………………………………….. 434

19.7. Полиномы над элементами поля Галуа……………………………………………………………………….. 435

19.8. Коды Рида — Соломона………………………………………………………………………………………………… 438

19.9. Границы кодов минимального расстояния с фиксированным алфавитом………………… 442

19.10. Булевы матрицы……………………………………………………………………………………………………………. 443

19.11. Коды проверки на четность с низкой плотностью…………………………………………………….. 444

19.12. Примечания по реализации…………………………………………………………………………………………. 449

19.13. Комментарии…………………………………………………………………………………………………………………. 450

19.14. Советы по дополнительной подготовке……………………………………………………………………… 451

19.15. Список рекомендуемой литературы…………………………………………………………………………… 451

  1. Криптография…………………………………………………………………………………. 452

20.1. Введение………………………………………………………………………………………………………………………….. 452

20.2. Шифрование файлов………………………………………………………………………………………………………. 452

20.3. Длина ключа……………………………………………………………………………………………………………………. 454

20.4. Хранилище ключей…………………………………………………………………………………………………………. 455

20.5. Криптографическое хеширование………………………………………………………………………………… 456

20.6. Обмен ключами……………………………………………………………………………………………………………….. 456

20.7. Другие протоколы…………………………………………………………………………………………………………… 456

20.8. Примечания по реализации……………………………………………………………………………………………. 457

20.9. Комментарии…………………………………………………………………………………………………………………… 457

20.10. Совет по дополнительной подготовке………………………………………………………………………… 458

20.11. Список рекомендуемой литературы…………………………………………………………………………… 458

  1. Вычислительная статистика…………………………………………………………… 459

21.1. Введение………………………………………………………………………………………………………………………….. 459

21.2. Оценки……………………………………………………………………………………………………………………………… 459

21.3. Оценщики…………………………………………………………………………………………………………………………. 462

21.4. Поиск наиболее эффективных оценщиков……………………………………………………………………. 469

21.5. Некоторые особенности асимптотики………………………………………………………………………….. 473

21.6. Оценка нормальной CDF………………………………………………………………………………………………… 473

21.7. Оценка CDF T-распределения……………………………………………………………………………………….. 474

21.8. Подробнее о доверительных интервалах…………………………………………………………………….. 475

21.9. Границы среднего значения в конечной выборке………………………………………………………… 479

21.10. Доверительные интервалы для общих метрик местоположения……………………………… 481

21.11. Выпадающие значения и надежные выводы……………………………………………………………… 484

21.12. Функции оценок…………………………………………………………………………………………………………….. 486

21.13. Измерение времени выполнения алгоритма……………………………………………………………….. 487

21.14. Корреляционный анализ……………………………………………………………………………………………… 488

21.15. Начальная загрузка……………………………………………………………………………………………………… 490

21.16. Когда использовать начальную загрузку?…………………………………………………………………. 504

21.17. Проверка гипотез………………………………………………………………………………………………………….. 505

21.18. Сравнение тестов………………………………………………………………………………………………………….. 507

21.19. Эффективное использование тестов……………………………………………………………………………. 509

21.20. Валидация исследований…………………………………………………………………………………………….. 514

21.21. Сравнение совпадающих пар……………………………………………………………………………………… 515

21.22. Множественные сравнения………………………………………………………………………………………….. 517

21.23. Сравнение совпадающих кортежей……………………………………………………………………………. 519

21.24. Сравнение независимых выборок……………………………………………………………………………….. 520

21.25. Перестановочные тесты……………………………………………………………………………………………….. 522

21.26. Сравнение нескольких альтернатив в нескольких предметных областях………………. 526

21.27. Работа с данными расчета…………………………………………………………………………………………… 529

21.28. Тестирование различий в распределении………………………………………………………………….. 531

21.29. Сравнение данных с распределением………………………………………………………………………… 532

21.30. Сравнение распределений двух выборок…………………………………………………………………… 534

21.31. Анализ чувствительности…………………………………………………………………………………………….. 535

21.32. Последовательность Соболя……………………………………………………………………………………….. 537

21.33. Планирование экспериментов: основные идеи………………………………………………………….. 541

21.34. Марковская цепь Монте-Карло…………………………………………………………………………………… 544

21.35. Байесовские методы……………………………………………………………………………………………………… 547

21.36. Поиск лучшей альтернативы с помощью моделирования………………………………………… 549

21.37. Расчет размера выборки………………………………………………………………………………………………. 552

21.38. Анализ временных рядов……………………………………………………………………………………………… 553

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

21.40. Анализ решений……………………………………………………………………………………………………………. 567

21.41. Примечания по реализации…………………………………………………………………………………………. 569

21.42. Комментарии…………………………………………………………………………………………………………………. 570

21.43. Советы по дополнительной подготовке……………………………………………………………………… 576

21.44. Список рекомендуемой литературы…………………………………………………………………………… 578

  1. Численные алгоритмы: введение и матричная алгебра…………………… 582

22.1. Введение………………………………………………………………………………………………………………………….. 582

22.2. Арифметика с плавающей точкой…………………………………………………………………………………. 583

22.3. Ошибки при использовании арифметики с плавающей точкой………………………………….. 584

22.4. Ошибка приближения…………………………………………………………………………………………………….. 588

22.5. Показатели устойчивости и состояния…………………………………………………………………………. 589

22.6. Ошибка оптимизации……………………………………………………………………………………………………… 591

22.7. Другие общие темы…………………………………………………………………………………………………………. 593

22.8. Разработка надежного численного программного обеспечения……………………………….. 595

22.9. Матричная алгебра………………………………………………………………………………………………………… 599

22.10. Матричные нормы………………………………………………………………………………………………………… 602

22.11. LUP-разложение……………………………………………………………………………………………………………. 603

22.12. Разложение Холецкого…………………………………………………………………………………………………. 608

22.13. Ленточные матрицы……………………………………………………………………………………………………… 609

22.14. Решение тридиагональных матричных уравнений…………………………………………………… 611

22.15. Ортогональные преобразования…………………………………………………………………………………. 611

22.16. QR-разложение……………………………………………………………………………………………………………… 613

22.17. Собственные значения и собственные векторы симметричной матрицы……………….. 615

22.18. Разложение по сингулярным значениям (SVD)………………………………………………………….. 618

22.19. Собственные значения и собственные векторы асимметричной матрицы……………… 622

22.20. Разреженные матрицы………………………………………………………………………………………………….. 627

22.21. Итерационные методы для разреженных матриц……………………………………………………… 633

22.22. Итерационные методы для собственных значений…………………………………………………… 634

22.23. Введение в интервальную арифметику………………………………………………………………………. 636

22.24. Примечания по реализации…………………………………………………………………………………………. 639

22.25. Комментарии…………………………………………………………………………………………………………………. 639

22.26. Советы по дополнительной подготовке……………………………………………………………………… 642

22.27. Список рекомендуемой литературы…………………………………………………………………………… 642

  1. Численные алгоритмы: работа с функциями………………………………….. 645

23.1. Введение………………………………………………………………………………………………………………………….. 645

23.2. Быстрое преобразование Фурье……………………………………………………………………………………. 645

23.3. Интерполяция: общие идеи……………………………………………………………………………………………. 649

23.4. Полиномиальная интерполяция из существующих данных……………………………………….. 652

23.5. Полиномы Чебышева……………………………………………………………………………………………………… 655

23.6. Кусочная интерполяция…………………………………………………………………………………………………. 662

23.7. Сплайны — для работы с существующими данными…………………………………………………. 668

23.8. Сравнение методов интерполяции………………………………………………………………………………… 672

23.9. Интегрирование………………………………………………………………………………………………………………. 674

23.10. Многомерное интегрирование…………………………………………………………………………………….. 681

23.11. Оценка функции…………………………………………………………………………………………………………….. 685

23.12. Оценка производных…………………………………………………………………………………………………….. 685

23.13. Решение нелинейных уравнений и систем………………………………………………………………….. 691

23.14. Поиск всех корней в одномерном случае……………………………………………………………………. 707

23.15. Обыкновенные дифференциальные уравнения………………………………………………………….. 708

23.16. Решение жестких ОДУ………………………………………………………………………………………………….. 713

23.17. Краевые задачи для ОДУ…………………………………………………………………………………………….. 717

23.18. Уравнения с частными производными: некоторые размышления…………………………… 719

23.19. Некоторые выводы……………………………………………………………………………………………………….. 720

23.20. Примечания по реализации…………………………………………………………………………………………. 721

23.21. Комментарии…………………………………………………………………………………………………………………. 721

23.22. Советы по дополнительной подготовке……………………………………………………………………… 727

23.23. Список рекомендуемой литературы…………………………………………………………………………… 728

  1. Численная оптимизация…………………………………………………………………. 731

24.1. Введение………………………………………………………………………………………………………………………….. 731

24.2. Некоторые общие идеи…………………………………………………………………………………………………… 731

24.3. Минимизация унимодальной функции с одной переменной………………………………………. 732

24.4. Минимизация многомерных функций: введение и координатный спуск…………………… 735

24.5. Линейный поиск………………………………………………………………………………………………………………. 738

24.6. Алгоритмы линейного поиска……………………………………………………………………………………….. 742

24.7. Методы, не требующие вычисления производных……………………………………………………… 748

24.8. Негладкая минимизация…………………………………………………………………………………………………. 753

24.9. Глобальная минимизация………………………………………………………………………………………………. 756

24.10. Оптимизация в дискретном множестве……………………………………………………………………….. 770

24.11. Стохастическая оптимизация……………………………………………………………………………………… 772

24.12. Алгоритмы стохастической аппроксимации……………………………………………………………… 773

24.13. Линейное программирование………………………………………………………………………………………. 776

24.14. Некоторые соображения о нелинейном программировании……………………………………. 779

24.15. Примечания по реализации…………………………………………………………………………………………. 780

24.16. Комментарии…………………………………………………………………………………………………………………. 781

24.17. Советы по дополнительной подготовке……………………………………………………………………… 786

24.18. Список рекомендуемой литературы…………………………………………………………………………… 787

  1. Введение в машинное обучение………………………………………………………. 790

25.1. Введение………………………………………………………………………………………………………………………….. 790

25.2. Что такое машинное обучение?…………………………………………………………………………………….. 790

25.3. Математическое обучение…………………………………………………………………………………………….. 791

25.4. Прогнозирование и структурный вывод……………………………………………………………………….. 796

25.5. Оценка риска предиктора………………………………………………………………………………………………. 796

25.6. Источники риска……………………………………………………………………………………………………………… 799

25.7. Контроль сложности………………………………………………………………………………………………………. 800

25.8. Ошибка аппроксимации…………………………………………………………………………………………………. 802

25.9. Устойчивость…………………………………………………………………………………………………………………… 805

25.10. Оценка риска стратегии обучения………………………………………………………………………………. 806

25.11. Принятие решений и выбор модели…………………………………………………………………………….. 810

25.12. Общие стратегии выбора модели………………………………………………………………………………… 812

25.13. Смещение, дисперсия и бэггинг…………………………………………………………………………………… 813

25.14. Паттерны проектирования…………………………………………………………………………………………… 816

25.15. Подготовка данных………………………………………………………………………………………………………. 817

25.16. Масштабирование………………………………………………………………………………………………………… 819

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

25.18. Выбор признаков………………………………………………………………………………………………………….. 821

25.19. Ядра……………………………………………………………………………………………………………………………….. 827

25.20. Обучение в реальном времени…………………………………………………………………………………….. 829

25.21. Работа с невекторными данными………………………………………………………………………………… 830

25.22. Масштабное обучение…………………………………………………………………………………………………. 830

25.23. Выводы………………………………………………………………………………………………………………………….. 832

25.24. Примечания по реализации…………………………………………………………………………………………. 833

25.25. Комментарии…………………………………………………………………………………………………………………. 833

25.26. Советы по дополнительной подготовке……………………………………………………………………… 839

25.27. Список рекомендуемой литературы…………………………………………………………………………… 840

  1. Машинное обучение: классификация…………………………………………….. 842

26.1. Введение………………………………………………………………………………………………………………………….. 842

26.2. Стратификация по метке класса……………………………………………………………………………………. 842

26.3. Оценка риска…………………………………………………………………………………………………………………… 844

26.4. Сведение мультикласса к двум классам……………………………………………………………………….. 848

26.5. Контроль сложности………………………………………………………………………………………………………. 851

26.6. Наивный классификатор Байеса…………………………………………………………………………………… 853

26.7. Ближайший сосед……………………………………………………………………………………………………………. 856

26.8. Дерево решений………………………………………………………………………………………………………………. 859

26.9. Механизм опорных векторов…………………………………………………………………………………………. 866

26.10. Линейный SVM……………………………………………………………………………………………………………… 868

26.11. Ядро SVM………………………………………………………………………………………………………………………. 873

26.12. Мультиклассовый нелинейный SVM………………………………………………………………………….. 878

26.13. Нейронная сеть……………………………………………………………………………………………………………… 880

26.14. Ансамбли рандомизации……………………………………………………………………………………………… 889

26.15. Обучение в реальном времени…………………………………………………………………………………….. 891

26.16. Бустинг…………………………………………………………………………………………………………………………… 894

26.17. Масштабное обучение…………………………………………………………………………………………………. 898

26.18. Экономичное обучение………………………………………………………………………………………………… 898

26.19. Несбалансированное обучение…………………………………………………………………………………… 903

26.20. Выбор признаков………………………………………………………………………………………………………….. 906

26.21. Сравнение классификаторов……………………………………………………………………………………….. 906

26.22. Примечания по реализации…………………………………………………………………………………………. 909

26.23. Комментарии…………………………………………………………………………………………………………………. 910

26.24. Советы по дополнительной подготовке……………………………………………………………………… 919

26.25. Список рекомендуемой литературы…………………………………………………………………………… 919

  1. Машинное обучение: регрессия………………………………………………………. 922

27.1. Введение………………………………………………………………………………………………………………………….. 922

27.2. Оценка риска…………………………………………………………………………………………………………………… 922

27.3. Управление сложностью………………………………………………………………………………………………… 924

27.4. Линейная регрессия………………………………………………………………………………………………………… 925

27.5. Регрессия лассо……………………………………………………………………………………………………………….. 926

27.6. Регрессия ближайших соседей………………………………………………………………………………………. 930

27.7. Дерево регрессии…………………………………………………………………………………………………………….. 931

27.8. Регрессия случайного леса…………………………………………………………………………………………….. 934

27.9. Нейронная сеть……………………………………………………………………………………………………………….. 935

27.10. Выбор признаков………………………………………………………………………………………………………….. 936

27.11. Сравнение производительности………………………………………………………………………………….. 936

27.12. Примечания по реализации…………………………………………………………………………………………. 937

27.13. Комментарии…………………………………………………………………………………………………………………. 938

27.14. Советы по дополнительной подготовке……………………………………………………………………… 941

27.15. Список рекомендуемой литературы…………………………………………………………………………… 942

  1. Машинное обучение: кластеризация………………………………………………. 943

28.1. Введение………………………………………………………………………………………………………………………….. 943

28.2. Постановка………………………………………………………………………………………………………………………. 943

28.3. Внешняя оценка………………………………………………………………………………………………………………. 945

28.4. Внутренняя оценка и выбор количества кластеров…………………………………………………….. 948

28.5. Расчет устойчивости………………………………………………………………………………………………………. 951

28.6. Кластеризация в евклидовом пространстве…………………………………………………………………. 953

28.7. Кластеризация в метрическом пространстве……………………………………………………………….. 957

28.8. Спектральная кластеризация………………………………………………………………………………………… 960

28.9. Эксперименты…………………………………………………………………………………………………………………. 964

28.10. Примечания по реализации…………………………………………………………………………………………. 964

28.11. Комментарии…………………………………………………………………………………………………………………. 965

28.12. Советы по дополнительной подготовке……………………………………………………………………… 969

28.13. Список рекомендуемой литературы…………………………………………………………………………… 969

  1. Машинное обучение: прочие задачи……………………………………………….. 971

29.1. Введение………………………………………………………………………………………………………………………….. 971

29.2. Обучение с подкреплением……………………………………………………………………………………………. 971

29.3. Функция, присваивающая значения……………………………………………………………………………… 972

29.4. Поиск часто встречающихся комбинаций предметов…………………………………………………. 974

29.5. Полуконтролируемое обучение…………………………………………………………………………………….. 975

29.6. Оценка плотности…………………………………………………………………………………………………………… 976

29.7. Обнаружение выпадающих значений…………………………………………………………………………… 976

29.8. Примечания по реализации……………………………………………………………………………………………. 977

29.9. Комментарии…………………………………………………………………………………………………………………… 977

29.10. Список рекомендуемой литературы…………………………………………………………………………… 978

  1. Отстойник: не слишком полезные алгоритмы и структуры данных.. 979

30.1. Введение………………………………………………………………………………………………………………………….. 979

30.2. Сортировка связанного списка……………………………………………………………………………………… 979

30.3. Частичная сортировка……………………………………………………………………………………………………. 981

30.4. Сжатое префиксное дерево……………………………………………………………………………………………. 981

30.5. Хеширование кукушкой…………………………………………………………………………………………………. 987

30.6. Немного приоритетных очередей…………………………………………………………………………………. 990

30.7. Младший общий предок (LCA) и запрос с минимальным диапазоном (RQM)…………. 996

30.8. Знаковый ранговый критерий Уилкоксона для двух выборок……………………………………. 997

30.9. Критерий Фридмана для согласованных выборок……………………………………………………… 998

30.10. MADS-подобный алгоритм оптимизации…………………………………………………………………… 999

30.11. Алгоритм классификации бустинга SAMME…………………………………………………………… 1000

30.12. Бустинг в задаче регрессии……………………………………………………………………………………….. 1001

30.13. Вероятностная кластеризация…………………………………………………………………………………… 1003

30.14. Иерархическая кластеризация………………………………………………………………………………….. 1007

30.15. Кластеризация на основе плотности………………………………………………………………………… 1010

30.16. Не представленные реализации………………………………………………………………………………… 1012

30.17. Советы по дополнительной подготовке……………………………………………………………………. 1013

30.18. Список рекомендуемой литературы…………………………………………………………………………. 1014

  1. Приложение: примечания о языке С++…………………………………………. 1015

31.1. Введение………………………………………………………………………………………………………………………… 1015

31.2. Путеводитель по литературе, посвященной C++……………………………………………………….. 1015

31.3. Советы по дополнительной подготовке……………………………………………………………………… 1015

31.4. Список рекомендуемой литературы…………………………………………………………………………… 1016

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

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

2-е издание книги “Android глазами хакера”

Android глазами хакера. 2-е издание

Рассмотрена внутренняя архитектура ОС Android, используемые ею разделы и файловые системы, принцип работы механизмов обновления и внутренних инструментов безопасности. Рассказано о разграничении доступа в ОС Android, о привилегиях, методах получения прав root, кастомизации и установке нестандартных прошивок. Описаны инструменты для дизассемблирования, отладки и анализа кода мобильных приложений, приведены примеры модификации кода с целью изменения функций ПО и внедрения в приложение сторонних модулей. Даны подробные рекомендации по деобфускации кода и обходу антиотладки, а также практические советы по защите собственных приложений от декомпиляции и исследования. Приводятся сведения о вредоносных программах для платформы Android, используемых ими уязвимостях, даны примеры кода таких программ. Рассказывается об использовании стандартных функций Android в нестандартных целях и способах противодействия вредоносному ПО. Во втором издании приводятся сведения об изменениях и нововведениях в Android 14.

Для разработчиков мобильных приложений, реверс-инженеров, специалистов по информационной безопасности и защите данных

БЕЗОПАСНОСТЬ ANDROID, ВЗЛОМ ПРИЛОЖЕНИЙ И ЗАЩИТА ОТ ВЗЛОМА

В книге рассмотрены:

  • Безопасность Android
  • Внутреннее устройство системы
  • Кастомизация прошивки
  • Получение root
  • Практические приемы взлома
  • Реверс-инжиниринг
  • Предотвращение взлома и исследования приложений
  • Мобильные вредоносные программы

Книга состоит из трех частей:

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

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

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

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

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

Введение………………………………………………………………………………………………….. 9

Что вы найдете в этой книге?……………………………………………………………………………………………………. 10

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

Предисловие ко второму изданию……………………………………………………………………………………………. 11

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

Приложение AnTrack…………………………………………………………………………………………………………………. 12

Часть I…………………………………………………………………………………………………. 13

Глава 1. Пять столпов Android. Технологии, лежащие в основе
самой популярной ОС……………………………………………………………………………. 15

Виртуальная машина………………………………………………………………………………………………………………… 15

Многозадачность………………………………………………………………………………………………………………………. 18

Binder…………………………………………………………………………………………………………………………………………… 21

Сервисы Google………………………………………………………………………………………………………………………….. 23

Ядро Linux и рантайм……………………………………………………………………………………………………………….. 24

Android Go…………………………………………………………………………………………………………………………………… 26

Глава 2. От кнопки включения до рабочего стола…………………………………. 29

Шаг первый. Aboot и таблица разделов………………………………………………………………………………….. 29

Шаг второй. Раздел boot……………………………………………………………………………………………………………. 31

Шаг второй, альтернативный. Раздел recovery……………………………………………………………………….. 33

Шаг третий. Инициализация…………………………………………………………………………………………………….. 33

Шаг четвертый. Zygote и app_process………………………………………………………………………………………. 35

Глава 3. Treble, A/B-разметка, динамические и модульные обновления…. 39

Treble…………………………………………………………………………………………………………………………………………… 40

A/B-разметка………………………………………………………………………………………………………………………………. 41

Динамические обновления………………………………………………………………………………………………………… 44

Виртуальная A/B-разметка………………………………………………………………………………………………………. 46

Модульные обновления…………………………………………………………………………………………………………….. 46

Трюк с сохранением пространства………………………………………………………………………………………….. 48

Глава 4. Броня Android…………………………………………………………………………… 51

Полномочия………………………………………………………………………………………………………………………………… 52

Ограничения……………………………………………………………………………………………………………………………….. 55

Запрет доступа к другим приложениям……………………………………………………………………….. 56

Шифрование данных…………………………………………………………………………………………………………………. 57

Доверенная среда исполнения………………………………………………………………………………………………….. 59

Доверенная загрузка………………………………………………………………………………………………………………….. 61

Защита от срыва стека………………………………………………………………………………………………………………. 62

SELinux……………………………………………………………………………………………………………………………………….. 65

Seccomp-bpf……………………………………………………………………………………………………………………………….. 66

Виртуализация…………………………………………………………………………………………………………………………… 68

Google Play Protect……………………………………………………………………………………………………………………… 69

Smart Lock………………………………………………………………………………………………………………………………….. 70

WebView……………………………………………………………………………………………………………………………………… 72

SafetyNet (Play Integrity API)…………………………………………………………………………………………………….. 73

Kill Switch…………………………………………………………………………………………………………………………………….. 74

Цифровые подписи APK…………………………………………………………………………………………………………….. 74

Итог……………………………………………………………………………………………………………………………………………… 76

Глава 5. Альтернативные прошивки, рутинг и кастомизация……………….. 77

GrapheneOS…………………………………………………………………………………………………………………………………. 77

Tor……………………………………………………………………………………………………………………………………………….. 79

Рутинг………………………………………………………………………………………………………………………………………….. 80

SuperSU……………………………………………………………………………………………………………………………. 82

Magisk………………………………………………………………………………………………………………………………. 82

Модификации…………………………………………………………………………………………………………………………….. 83

Часть II……………………………………………………………………………………………….. 85

Глава 6. Основы взлома…………………………………………………………………………. 87

Делаем платное бесплатным……………………………………………………………………………………………………. 87

Снаряжаемся…………………………………………………………………………………………………………………… 88

Вскрываем подопытного……………………………………………………………………………………………….. 89

Изучаем код…………………………………………………………………………………………………………………….. 90

Вносим правки………………………………………………………………………………………………………………… 92

Глава 7. Внедряемся в чужое приложение………………………………………………. 95

Ищем точку входа……………………………………………………………………………………………………………………… 95

Пишем payload…………………………………………………………………………………………………………………………… 97

Вызываем payload……………………………………………………………………………………………………………………… 98

Крадем данные………………………………………………………………………………………………………………………… 100

Периодические задачи…………………………………………………………………………………………………………….. 103

Глава 8. Продираемся сквозь обфусцированный код…………………………… 105

Как работает обфускация……………………………………………………………………………………………………….. 105

Упаковщики……………………………………………………………………………………………………………………………… 109

Деобфускаторы………………………………………………………………………………………………………………………… 109

Небольшой пример………………………………………………………………………………………………………………….. 112

Глава 9. Взлом с помощью отладчика………………………………………………….. 117

Отладчик и реверсинг……………………………………………………………………………………………………………… 117

Флаг отладки……………………………………………………………………………………………………………………………. 118

Декомпиляция и дизассемблирование…………………………………………………………………………………… 118

Android Studio…………………………………………………………………………………………………………………………… 118

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

Глава 10. Frida……………………………………………………………………………………… 123

Dynamic Instrumentation Toolkit…………………………………………………………………………………………….. 123

Первые шаги…………………………………………………………………………………………………………………………….. 124

Пишем код………………………………………………………………………………………………………………………………… 126

Внедряемся……………………………………………………………………………………………………………………………….. 127

Ломаем CrackMe……………………………………………………………………………………………………………………… 129

Перехват нативных библиотек……………………………………………………………………………………………….. 131

Другие примеры применения Frida…………………………………………………………………………………………. 132

Обход защиты на снятие скриншотов………………………………………………………………………… 133

Извлечение SSL-сертификата приложения из KeyStore…………………………………………….. 134

Обход детекта root……………………………………………………………………………………………………….. 135

Обход упаковщиков……………………………………………………………………………………………………… 136

Выводы……………………………………………………………………………………………………………………………………… 137

Глава 11. Drozer и другие инструменты……………………………………………….. 139

Активности……………………………………………………………………………………………………………………………….. 140

Перехват интентов…………………………………………………………………………………………………………………… 142

Перехват возвращаемого значения………………………………………………………………………………………… 143

Content Provider………………………………………………………………………………………………………………………… 144

Сервисы…………………………………………………………………………………………………………………………………….. 145

Другие возможности………………………………………………………………………………………………………………… 146

Другие уязвимости…………………………………………………………………………………………………………………… 146

Выводы………………………………………………………………………………………………………………………….. 149

Другие инструменты……………………………………………………………………………………………………………….. 149

Статический анализ……………………………………………………………………………………………………… 149

Jadx…………………………………………………………………………………………………………………….. 149

JEB………………………………………………………………………………………………………………………. 150

Apktool……………………………………………………………………………………………………………….. 150

APKiD………………………………………………………………………………………………………………….. 150

Simplify……………………………………………………………………………………………………………….. 151

DeGuard………………………………………………………………………………………………………………. 151

Bytecode Viewer…………………………………………………………………………………………………. 152

QARK………………………………………………………………………………………………………………….. 153

Динамический анализ………………………………………………………………………………………………….. 153

Objection…………………………………………………………………………………………………………….. 154

Inspeckage………………………………………………………………………………………………………….. 154

Что еще может пригодиться?………………………………………………………………………………………………….. 155

Часть III…………………………………………………………………………………………….. 157

Глава 12. История вирусописательства для Android…………………………….. 159

До нашей эры, или Как написать вирус за 15 минут……………………………………………………………. 159

Geinimi и все-все-все………………………………………………………………………………………………………………… 160

DroidDream и начало борьбы за чистоту маркета……………………………………………………………….. 161

Zeus-in-the-Mobile…………………………………………………………………………………………………………………….. 162

Первый IRC-бот……………………………………………………………………………………………………………………….. 164

Первый полиморфный троян…………………………………………………………………………………………………… 164

Вирус-матрешка………………………………………………………………………………………………………………………. 165

Действительно продвинутый троян……………………………………………………………………………………….. 167

Ransomware……………………………………………………………………………………………………………………………… 168

Adware………………………………………………………………………………………………………………………………………. 170

Click fraud…………………………………………………………………………………………………………………………………. 170

А как же другие ОС?………………………………………………………………………………………………………………… 171

Глава 13. Современные образцы вредоносных программ…………………….. 173

Toast Amigo………………………………………………………………………………………………………………………………. 173

Android/Banker.GT!tr.spy…………………………………………………………………………………………………………. 173

Chrysaor…………………………………………………………………………………………………………………………………….. 174

Rootnik………………………………………………………………………………………………………………………………………. 175

Mandrake………………………………………………………………………………………………………………………………….. 176

Joker…………………………………………………………………………………………………………………………………………… 177

MalLocker…………………………………………………………………………………………………………………………………. 178

Вредоносные библиотеки……………………………………………………………………………………………………….. 180

Уязвимости, используемые троянами…………………………………………………………………………………….. 181

StrandHogg — уязвимость с подменой приложений………………………………………………….. 181

Cloak & Dagger………………………………………………………………………………………………………………. 182

Перекрытие диалогов запросов разрешений……………………………………………………………… 184

Глава 14. Пишем вредоносную программу для Android………………………… 185

Каркас………………………………………………………………………………………………………………………………………. 185

Информация о местоположении…………………………………………………………………………………………….. 187

Список установленных приложений……………………………………………………………………………………… 189

Дамп SMS…………………………………………………………………………………………………………………………………. 190

Запись аудио……………………………………………………………………………………………………………………………. 191

Съемка………………………………………………………………………………………………………………………………………. 192

Складываем все вместе……………………………………………………………………………………………………………. 198

Задания по расписанию………………………………………………………………………………………………. 198

Снимок при включении экрана……………………………………………………………………………………. 199

Запуск при загрузке……………………………………………………………………………………………………… 199

Запись аудио по команде…………………………………………………………………………………………….. 200

Отправка данных на сервер………………………………………………………………………………………… 201

Выводы……………………………………………………………………………………………………………………………………… 201

Глава 15. Используем возможности Android в личных целях……………….. 203

IPC…………………………………………………………………………………………………………………………………………….. 203

Интенты…………………………………………………………………………………………………………………………. 204

Широковещательные сообщения………………………………………………………………………………… 205

Логирование звонков……………………………………………………………………………………………………. 207

Скрытые API…………………………………………………………………………………………………………………………….. 208

Оригинальный фреймворк……………………………………………………………………………………………. 210

Рефлексия………………………………………………………………………………………………………………………. 211

Какие еще скрытые API существуют?………………………………………………………………………… 211

Запрет рефлексии в Android 9……………………………………………………………………………………… 211

Системный API…………………………………………………………………………………………………………………………. 212

Немного теории…………………………………………………………………………………………………………….. 212

Уровень доступа privileged…………………………………………………………………………………………… 213

Уровень доступа signature……………………………………………………………………………………………. 215

Уровень доступа development…………………………………………………………………………………….. 215

Права администратора и сервис Accessibility……………………………………………………………………….. 216

Нажимаем кнопки смартфона……………………………………………………………………………………… 217

Извлекаем текст из полей ввода………………………………………………………………………………….. 219

Блокируем устройство и защищаемся от удаления………………………………………………….. 221

Перехватываем и смахиваем уведомления………………………………………………………………… 224

Права root…………………………………………………………………………………………………………………………………. 226

Запускаем команды……………………………………………………………………………………………………… 226

Получаем права суперпользователя………………………………………………………………………….. 228

Несколько примеров…………………………………………………………………………………………………….. 230

Сторонние библиотеки………………………………………………………………………………………………… 233

Расширение функциональности……………………………………………………………………………………………… 233

Плагины…………………………………………………………………………………………………………………………. 233

API………………………………………………………………………………………………………………………. 234

Простейший плагин…………………………………………………………………………………………… 234

Поиск плагинов………………………………………………………………………………………………….. 235

Запуск функций плагина…………………………………………………………………………………… 236

Динамическая загрузка кода……………………………………………………………………………………….. 238

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

Долой рефлексию………………………………………………………………………………………………. 240

Когда модулей много………………………………………………………………………………………… 241

Берем модули с собой……………………………………………………………………………………….. 242

Глава 16. Скрываем и запутываем код………………………………………………… 245

Обфускация………………………………………………………………………………………………………………………………. 245

Собственный словарь…………………………………………………………………………………………………… 246

Скрытие строк………………………………………………………………………………………………………………………….. 247

Сохраняем строки в strings.xml……………………………………………………………………………………. 247

Разбиваем строки на части………………………………………………………………………………………….. 248

Кодируем помощью XOR…………………………………………………………………………………………….. 248

Шифруем строки…………………………………………………………………………………………………………… 250

Советы по использованию шифрования…………………………………………………………………….. 252

Храним данные в нативном коде……………………………………………………………………………………………. 253

«Крашим» измененное приложение……………………………………………………………………………………….. 254

Сверяем цифровую подпись………………………………………………………………………………………… 255

Проверяем источник установки…………………………………………………………………………………… 257

Защита от реверса и отладки…………………………………………………………………………………………………. 257

Root………………………………………………………………………………………………………………………………… 257

Эмулятор……………………………………………………………………………………………………………………….. 259

Отладчик……………………………………………………………………………………………………………………….. 261

Xposed……………………………………………………………………………………………………………………………. 263

Frida……………………………………………………………………………………………………………………………….. 264

Клонирование……………………………………………………………………………………………………………….. 267

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

Зобнин Евгений Евгеньевич

Зобнин Евгений Евгеньевич, редактор журнала «Хакер», программист, в прошлом системный администратор. Автор статей на тему внутреннего устройства настольных и мобильных ОС, безопасности и взлома. Имеет 20-летний опыт в области UNIX-подобных операционных систем, последние 10 лет пишет статьи об устройстве Android. Автор популярного приложения AIO Launcher.

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

Супер бестселлер: “Python для гиков”

Python для гиков

Книга подробно рассказывает о разработке, развертывании и поддержке крупномасштабных проектов на Python. Представлены такие концепции, как итераторы, генераторы, обработка ошибок и исключений, обработка файлов и ведение журналов. Приведены способы автоматизации тестирования приложений и разработки через тестирование (TDD). Рассказано о написании приложений с использованием кластера Apache Spark для обработки больших данных, о разработке и развертывании бессерверных программ в облаке на примере Google Cloud Platform (GCP), о создании веб-приложений и REST API, использовании среды Flask. Показаны способы применения языка для создания, обучения и оценки моделей машинного обучения, а также их развертывания в облаке, описаны приемы использования Python для извлечения данных с сетевых устройств и систем управления сетью (NMS).

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

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

Гик — человек, глубоко погруженный в мир компьютерных технологий, стремящийся досконально разобраться в наиболее важных мелочах и нюансах. Эта книга написана для гиков, увлеченных программированием на Python.

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

Вы изучите:

  • Принципы разработки и управления сложными проектами
  • Способы автоматизации тестирования приложений и разработки через тестирование (TDD)
  • Многопоточность и многопроцессорность в Python
  • Написание приложений с использованием кластера Apache Spark для обработки больших данных
  • Разработку и развертывание бессерверных программ в облаке на примере Google Cloud Platform (GCP)
  • Создание на Python веб-приложений и REST API, использование среды Flask
  • Использование Python для извлечения данных с сетевых устройств и систем управления сетью (NMS)
  • Применение Python для анализа данных и машинного обучения

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

Об авторе. 14

О рецензентах. 15

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

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

О чем эта книга. 17

Как получить максимальную отдачу от книги. 18

Загрузка файлов с примерами кода. 18

Условные обозначения. 19

Раздел 1. Python помимо основ. 21

Глава 1. Оптимальный жизненный цикл разработки на Python. 23

Культура и сообщество Python. 23

Этапы проекта Python. 26

Стратегия процесса разработки. 27

Итерация по этапам. 28

Стремление к MVP в первую очередь. 28

Стратегия разработки для специализированных предметных областей. 29

Эффективное документирование кода Python. 32

Комментарии Python. 32

Docstring. 32

Документация на уровне функций или классов. 34

Разработка эффективной схемы именования. 35

Методы. 36

Переменные. 36

Константы. 37

Классы. 37

Пакеты. 38

Модули. 38

Соглашения об импорте. 38

Аргументы. 38

Полезные инструменты. 38

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

Что не стоит хранить в репозитории системы контроля версий. 39

Понимание стратегий развертывания кода. 40

Пакетная разработка. 40

Среды разработки Python. 42

IDLE. 42

Sublime Text 42

Atom.. 42

PyCharm.. 42

Visual Studio Code. 43

PyDev. 43

Spyder 43

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

Вопросы. 44

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

Ответы. 44

Глава 2. Использование модулей для сложных проектов. 45

Технические требования. 46

Знакомство с модулями и пакетами. 46

Импорт модулей. 46

Оператор import 48

Оператор __import__. 52

Инструмент importlib.import_module. 52

Абсолютный и относительный импорт. 53

Загрузка и инициализация модуля. 55

Загрузка модуля. 55

Установка параметров для специальных переменных. 55

Выполнение кода. 56

Стандартные модули. 57

Написание многоразовых модулей. 58

Независимая функциональность. 58

Генерализация функционала. 59

Традиционный стиль программирования. 60

Четко определенная документация. 61

Сборка пакетов. 62

Именование. 63

Файл инициализации пакета. 63

Сборка пакета. 63

Доступ к пакетам из любого расположения. 66

Общий доступ к пакету. 70

Создание пакета в соответствии с рекомендациями PyPA.. 70

Установка из локального исходного кода с помощью pip. 73

Публикация пакета в Test PyPI 75

Установка пакета из PyPI 76

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

Вопросы. 77

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

Ответы. 78

Глава 3. Расширенное объектно-ориентированное программирование
на Python. 79

Технические требования. 80

Знакомство с классами и объектами. 80

Различия между атрибутами класса и атрибутами экземпляра. 80

Конструкторы и деструкторы классов. 83

Различия между методами класса и методами экземпляра. 84

Специальные методы. 85

Принципы ООП.. 86

Инкапсуляция данных. 87

Объединение данных и действий. 87

Сокрытие информации. 89

Защита данных. 91

Традиционный подход к использованию геттеров и сеттеров. 91

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

Расширение классов с помощью наследования. 94

Простое наследование. 94

Множественное наследование. 96

Полиморфизм. 97

Перегрузка метода. 97

Переопределение метода. 98

Абстракция. 100

Композиция как альтернативный подход к проектированию.. 102

Утиная типизация в Python. 104

Когда не стоит использовать ООП в Python. 105

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

Вопросы. 106

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

Ответы. 107

Раздел 2. Расширенные концепции программирования. 109

Глава 4. Библиотеки Python для продвинутого программирования. 111

Технические требования. 111

Введение в контейнеры данных Python. 112

Строки. 112

Списки. 113

Кортежи. 114

Словари. 114

Множества. 115

Итераторы и генераторы для обработки данных. 116

Итераторы. 116

Генераторы. 120

Обработка файлов в Python. 122

Операции с файлами. 123

Обработка ошибок и исключений. 126

Работа с исключениями в Python. 127

Вызов исключений. 129

Определение пользовательских исключений. 130

Модуль logging в Python. 131

Основные компоненты системы логирования. 132

Работа с модулем logging. 134

Что стоит и не стоит записывать в журнал. 140

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

Вопросы. 141

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

Ответы. 141

Глава 5. Тестирование и автоматизация с помощью Python. 143

Технические требования. 144

Понимание различных уровней тестирования. 144

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

Интеграционное тестирование. 145

Системное тестирование. 145

Приемочное тестирование. 146

Работа с тестовыми фреймворками Python. 146

Работа с фреймворком unittest 148

Фреймворк тестирования pytest 157

Разработка через тестирование. 165

Красный. 165

Зеленый. 166

Рефакторинг. 166

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

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

Вопросы. 168

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

Ответы. 169

Глава 6. Дополнительные советы и приемы Python. 170

Технические требования. 170

Расширенные приемы использования функций в Python. 171

Функции counter, itertools и zip для итерационных задач. 171

Использование методов filter, map и reduce для преобразования данных. 175

Создание лямбда-функций. 178

Внедрение одной функции в другую.. 179

Изменение поведения функции с помощью декораторов. 181

Расширенные концепции структур данных. 187

Внедрение словаря в словарь. 187

Использование включений. 190

Введение в Pandas DataFrame. 192

Операции с объектом DataFrame. 193

Сложные случаи использования DataFrame. 198

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

Вопросы. 204

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

Ответы. 204

Раздел 3. Масштабирование за пределы одного потока. 205

Глава 7. Многопроцессорная обработка, многопоточность
и асинхронное программирование. 207

Технические требования. 208

Многопоточность в Python и ее ограничения. 208

Слепое пятно Python. 209

Ключевые компоненты многопоточного программирования на Python. 210

Практический пример: многопоточное приложение для загрузки файлов
с Google Диска. 218

Многопроцессорная обработка. 221

Создание нескольких процессов. 221

Обмен данными между процессами. 224

Обмен объектами между процессами. 228

Синхронизация процессов. 230

Практический пример: многопроцессорное приложение
для загрузки файлов с Google Диска. 231

Асинхронное программирование для адаптивных систем. 233

Модуль asyncio. 234

Распределение задач с помощью очередей. 236

Практический пример: асинхронное приложение для загрузки файлов
с Google Диска. 238

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

Вопросы. 240

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

Ответы. 241

Глава 8. Масштабирование Python с помощью кластеров. 242

Технические требования. 243

Возможности кластеров для параллельной обработки. 243

Hadoop MapReduce. 244

Apache Spark. 246

Устойчивые распределенные наборы данных (RDD) 249

Операции с RDD.. 249

Создание RDD.. 250

PySpark для параллельной обработки данных. 251

Создание программ SparkSession и SparkContext 253

PySpark для операций с RDD.. 254

PySpark DataFrames 257

PySpark SQL. 261

Практические примеры использования Apache Spark и PySpark. 262

Пример 1: калькулятор числа π в Apache Spark. 262

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

Вопросы. 269

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

Ответы. 270

Глава 9. Программирование на Python для облака. 271

Технические требования. 271

Знакомство с облачными возможностями для приложений Python. 272

Среды разработки Python для облака. 272

Облачные среды выполнения для Python. 274

Создание веб-сервисов Python для облачного развертывания. 276

Использование Google Cloud SDK.. 277

Использование веб-консоли GCP. 284

Использование Google Cloud Platform для обработки данных. 287

Введение в основы Apache Beam.. 287

Конвейеры Apache Beam.. 289

Создание конвейеров для Cloud Dataflow.. 294

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

Вопросы. 299

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

Ответы. 300

Раздел 4. Python для веб-разработки, облака и сети. 301

Глава 10. Использование Python для разработки веб-приложений
и REST API 303

Технические требования. 304

Требования к веб-разработке. 304

Веб-фреймворки. 304

Пользовательский интерфейс. 305

Веб-сервер/сервер приложений. 306

База данных. 307

Безопасность. 307

API 307

Документация. 307

Знакомство с фреймворком Flask. 308

Создание базового веб-приложения с маршрутизацией. 308

Обработка запросов с разными типами HTTP-методов. 310

Отображение статического и динамического контента. 312

Извлечение параметров из HTTP-запроса. 313

Взаимодействие с системами управления базами данных. 315

Обработка ошибок и исключений в веб-приложениях. 318

Создание REST API 321

Использование Flask для REST API 322

Разработка REST API для доступа к базе данных. 324

Пример: создание веб-приложения с помощью REST API 326

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

Вопросы. 332

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

Ответы. 332

Глава 11. Разработка микросервисов на Python. 334

Технические требования. 334

Введение в микросервисы. 335

Практические рекомендации по созданию микросервисов. 337

Создание приложений на базе микросервисов. 338

Варианты разработки микросервисов на Python. 339

Варианты развертывания микросервисов. 340

Разработка приложения на основе микросервисов. 341

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

Вопросы. 352

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

Ответы. 353

Глава 12. Создание бессерверных функций на Python. 354

Технические требования. 355

Знакомство с бессерверными функциями. 355

Преимущества бессерверных функций. 356

Варианты использования. 356

Варианты развертывания бессерверных функций. 357

Написание бессерверных функций. 358

Создание облачной функции на основе HTTP с помощью консоли GCP. 359

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

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

Вопросы. 367

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

Ответы. 367

Глава 13. Python и машинное обучение. 369

Технические требования. 370

Введение в машинное обучение. 370

Использование Python для машинного обучения. 372

Библиотеки машинного обучения в Python. 372

Рекомендации по обучающим данным. 374

Создание и оценка модели машинного обучения. 375

Процесс построения модели машинного обучения. 375

Создание примера машинного обучения. 376

Оценка модели с помощью кросс-валидации и тонкой настройки гиперпараметров. 381

Сохранение ML-модели в файл. 384

Развертывание и прогнозирование ML-модели в GCP Cloud. 385

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

Вопросы. 388

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

Ответы. 389

Глава 14. Python для автоматизации сети. 390

Технические требования. 391

Введение в автоматизацию сети. 391

Плюсы и минусы автоматизации сети. 392

Варианты использования. 393

Взаимодействие с сетевыми устройствами. 394

Протоколы для взаимодействия с сетевыми устройствами. 394

Взаимодействие с сетевыми устройствами с помощью библиотек Python
на основе SSH.. 397

Взаимодействие с сетевыми устройствами с помощью NETCONF. 404

Интеграция с системами управления сетью.. 408

Использование конечных точек сервиса определения местоположения. 409

Получение токена аутентификации. 410

Получение сетевых устройств и инвентаризация интерфейсов. 411

Обновление порта на сетевом устройстве. 412

Интеграция с событийно-ориентированными системами. 414

Создание подписок для Apache Kafka. 416

Обработка событий от Apache Kafka. 417

Продление и удаление подписки. 418

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

Вопросы. 419

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

Ответы. 420

 

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

Азиф Мухаммад

Мухаммад Азиф — программный архитектор, обладающий обширным опытом в области веб-разработки, автоматизации сетей и облаков, виртуализации и машинного обучения. ,Возглавлял многие крупномасштабные проекты в различных коммерческих компаниях. В 2012 году, получил степень доктора философии в области компьютерных систем в Карлтонском университете (Оттава, Канада) и в настоящее время работает в компании Nokia в качестве ведущего специалиста.

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

Новинка: “Создание сайтов и лендингов на WordPress и Elementor с нуля”

Создание сайтов и лендингов на WordPress и Elementor с нуля

Рассказано о выборе хостинга и регистрации домена для сайта. Подробно рассмотрена установка и настройка WordPress. Рассказано об установке и настройке тем (шаблонов). Дана инструкция по созданию «шапки» сайта, многоуровневого меню, адаптации дизайна для компьютеров, ноутбуков и различных типов мобильных устройств. Рассматриваются наиболее популярные плагины, способы публикации на сайте видеороликов, аудиофайлов, опросов. Описаны способы обработки графики. Приведена подробная инструкция по созданию   лендинга с использованием конструктора Elementor. От читателя не требуется наличия профессиональных знаний в сфере программирования и дизайна.

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

Создай свой сайт с WordPress и Elementor!

WordPress — бесплатная система управления содержимым сайта с открытым исходным кодом. С помощью WordPress можно создавать как простые сайты «визитки», так и сложные проекты — блоги, корпоративные порталы, интернет-магазины.

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

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

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

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

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

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

Об этой книге. 9

История WordPress. 11

Почему стоит делать сайты на WordPress?. 12

Используемые в книге обозначения. 13

Глава 1. Домен и хостинг. 15

Основные понятия. 15

Сайт. 15

Хостинг. 15

Домен. 16

Покупка домена и хостинга для сайта. 17

Пример настройки службы DNS. 22

Резюме. 24

Глава 2. Создаем сайт на WordPress. 25

О бесплатном хостинге. 25

Пример 1. Бесплатный хостинг на Sprinthost.ru. 26

Шаг 1: регистрация. 26

Шаг 2: изучаем панель управления хостингом.. 27

Шаг 3: установка WordPress. 28

Пример 2. Бесплатное создание сайта на хостинге Beget 31

Шаг 1: получаем доступ на хостинг. 31

Шаг 2: устанавливаем на хостинг WordPress. 32

Запуск сайта. 33

Пример 3. Платное создание сайта на хостинге Timeweb. 35

Шаг 1: регистрация и покупка хостинга на Timeweb. 35

Шаг 2: покупаем домен на Timeweb. 39

Шаг 3: чистим хостинг. 40

Шаг 4: установка WP на хостинг Timeweb. 40

В чем разница двух панелей управления?. 42

Кодекс веб-мастера. 43

Глава 3. Первичные настройки WP-сайта после установки на хостинг. 45

Делаем все востребованные обновления. 45

Обновление версии PHP. 46

Настройка консоли сайта. 47

Раздел Общие настройки. 48

Раздел Чтение (главной страницы) 49

Раздел Постоянные ссылки. 50

Раздел Обсуждения. 51

Первые плагины.. 51

Латинизация ссылок: плагин Rus-To-Lat 51

Делаем ссылки короткими: плагин Bring Back the Get Shortlink Button. 54

Создаем заглушку: плагин WP Maintenance Mode. 55

Исключаем спам на своем сайте: плагин Akismet Spam Protection. 56

Глава 4. Выбор и установка темы.. 61

Пример установки темы через поиск. 61

Пример установки темы из ZIP-архива. 62

Замена темы.. 62

Структура темы WordPress. 63

Удаление лишних записей и страниц, присутствующих в теме по умолчанию.. 64

Проверка темы на паразитные ссылки: плагин Theme Authenticity Checker. 66

Граватар — аватар для сайта. 67

Фавикон — значок сайта. 70

Установка фавикона на WP-сайт с помощью плагина
Favicon by RealFaviconGenerator. 74

Логотип. 75

Установка фона сайта. 78

Глава 5. Шапка и подвал сайта. 79

Шапка сайта. 79

Пример создания шапки в программе XHeader. 80

Добавление шапки на сайт. 84

Пример оформления шапки сайта в теме Astra. 84

Добавим на шапку свои соцсети. 85

Добавим на шапку свою почту. 87

Остальные настройки шапки. 88

Корректировка вида шапки для показа сайта на смартфоне. 89

Подвал сайта. 90

Содержание подвала сайта. 91

Советы.. 92

Пример оформления подвала сайта в теме Astra. 92

Редактируем нижний колонтитул: плагин Remove Footer Credit 94

Использование пространства подвала: плагин Podamibe
Simple Footer Widget Area. 96

Глава 6. Создание страниц сайта. Виджеты.. 97

Создаем обязательные страницы.. 97

Колонки на странице. 98

Виджеты.. 98

Настройка меню: плагин Simple page ordering. 101

HTML-карта сайта: плагин WP DS Blog Map. 102

Защита страниц сайта паролем.. 104

Рубрики (категории) и метки. 106

Создание рубрик. 106

Создание меток. 107

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

Кнопка Наверх. 109

Плагин jQuery Smooth Scroll 109

Плагин WPFront Scroll Top. 110

Советы по структуре сайта. 111

Глава 7. Форма обратной связи. Создание кнопок. 113

Создание формы Контакты.. 113

Пример 1: плагин Contact Form by BestWebSoft 113

Настройки формы.. 115

Пример 2: плагин Contact Form 7. 117

Создание кнопки. 117

Ссылка на сайте на номер телефона, Skype и отправку СМС.. 119

Глава 8. Меню сайта. Политика конфиденциальности. 121

Создание меню.. 121

Оформление в меню главной страницы сайта. 123

Пример настройки вида меню для темы Astra на ПК.. 124

Пример настройки вида меню для темы Astra на смартфоне. 125

Политика конфиденциальности. 127

Создание политики конфиденциальности. 127

Исключаем из меню соглашение об обработке персональных данных. 130

Глава 9. Полезные плагины. Приемы работы с сайтом.. 135

Защита текста от копирования: плагин WP-CopyProtect 135

Оглавление: плагин Table of Contents Plus (TOC+) 136

Защита сайта от взлома: плагин Limit Login Attempts. 137

Как опубликовать на сайте видео?. 139

Берем видео с YouTube. 139

Способ 1: использование блока HTML. 139

Способ 2: использование блока YouTube. 141

Добавляем на сайт свое видео. 142

Публикуем на сайте звуковые (аудио) файлы.. 143

Публикация неуникального контента: плагин Yoast SEO.. 143

Опрос: плагин WP-Polls. 144

Выводим опрос на странице. 144

Размещаем опрос в сайдбаре. 146

Организация скачивания файла с сайта. 147

Установка цепочки «Хлебные крошки»:
плагины Head, Footer and Post Injections и Flexy Breadcrumb. 149

Глава 10. Наполнение сайта контентом.. 155

Блочный редактор контента Gutenberg. 155

Изменение размера шрифта в редакторе Gutenberg. 160

Классический редактор WordPress. 162

Плагин Classic Editor. 162

Текстовый редактор Advanced Editor Tools. 162

Изменение страниц WordPress на записи и обратно. 164

Создание гиперссылок. 165

Создание ссылки на файл. 166

Вставка баннера на сайт. 167

Загрузка в WordPress PDF-файлов. 168

Скриншот страниц сайта. 170

Глава 11. Работаем с изображениями. 173

Размер изображения. 173

Количество изображений на странице. 173

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

Уменьшение веса картинок. 174

Сервис уменьшения веса изображений https://tinypng.com/ 174

Сжатие изображений: плагин EWWW Image Optimiser. 174

Графический редактор vistacreate. 177

Сервис работы с графикой Сanva. 178

Создание электронной подписи: сервис Signature Generator. 179

Настройка изображений в статьях WordPress. 180

Миниатюра статьи. 181

Грамотная загрузка изображений на сайт. 182

Защита изображений на сайте: плагин водяного знака Image Watermark. 185

Поиск изображений без авторских прав. 188

Ищем анимацию для сайта. 191

Создание слайдера: плагин Smart Slider 3. 194

Публикация слайдера. 199

Глава 12. Сайт на поддомене. 201

Создание поддомена 3-го уровня. 201

Глава 13. Elementor — конструктор лендингов. 207

Чем лендинг отличается от сайта?. 207

Установка Elementor. 209

Практический пример: первый экран лендинга. 210

Создание разделителя между экранами. 215

Добавление анимации. 217

Второй экран лендинга. 218

Третий экран лендинга. 221

Четвертый экран лендинга. 222

Пятый экран лендинга. 224

Шестой экран с формой сообщения от посетителя. 225

Настройка отступов. 226

О работе с графикой. 228

Глава 14. Elementor: инструменты и приемы работы.. 231

Адаптивность лендинга. 231

Включение лендинга в меню сайта. 234

Что дальше?. 234

Кнопка. 235

Блок Прогресс. 235

Динамичный фон. 236

Работа с шаблонами (темами) 238

Если вы случайно что-то нужное удалили… 240

Если лендинг «глючит» (о плохих особенностях Elementor) 241

Инструмент Навигатор. 241

Поиск виджетов (строка поиска Finder) 241

О шрифтах. 242

Стоит ли использовать Elementor PRO?. 243

Генерируем «рыбу» из текста. 244

Бесплатные изображения для лендинга. 245

Ленивая загрузка изображений. 246

Плагин a3 Lazy Load. 246

Плагин Smush — Lazy Load Images, Optimize & Compress Images. 248

Глава 15. Пример создания на Elementor сайта-визитки. 249

Начинаем работу: первый экран сайта-визитки. 249

Тиражирование экранов. 251

Высота макета. Настройка размеров изображения в секции. 252

Разделитель. 254

Положение объекта в секции. 254

Цвет кнопки. 255

Второй экран сайта-визитки. 256

Третий экран сайта-визитки. 257

Четвертый экран сайта-визитки. 258

Пятый экран сайта-визитки: спойлеры и аккордеоны.. 261

Шестой экран сайта-визитки. 262

Подключение меню сайта к Elementor 264

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

Экран Наши услуги. 266

Шапка лендинга. 267

Якоря для меню шапки. 267

Соцсети. 269

Проверяем адаптивность. 271

Elementor: резюме. 271

Глава 16. Taplink — сервис мгновенного создания лендинга. 273

Предварительная информация. 273

Регистрация. 273

Создание сайта. 277

Создание ссылок. 279

Приложение. Глоссарий. 283

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

Молочков Владимир Петрович

Владимир Петрович Молочков — кандидат педагогических наук, преподаватель высшей квалификационной категории Политехнического колледжа Новгородского госуниверситета им. Ярослава Мудрого. Автор 18 книг по компьютерной тематике и более 200 статей в СМИ.