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

Суперхит: “Изучаем 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 статей в СМИ.

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

Представляем: “Data Mesh. Новая парадигма работы с данными”

Data Mesh. Новая парадигма работы с данными

Впервые на русском языке книга об инновационной парадигме Data Mesh, продиктованной современным развитием, децентрализацией больших данных и подходами к их обработке.  Изложенная концепция развивает идеи предметно-ориентированного проектирования (DDD) и озера данных (Data Lake), раскрывает принципы федеративного цифрового управления данными.

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

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

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

Отзывы читателей на Amazon.com

В этой книге разобрано, как сформировалась парадигма «data mesh» – современная альтернатива таким архитектурам, как хранилища и озёра данных. Автор рассказывает, как качественнее и эффективнее нарабатывать ценность имеющихся данных и монетизировать их – чего не всегда позволяют добиться более традиционные подходы.

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

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

Об авторе. 13

Отзывы о книге. 14

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

Предисловие к русскому изданию.. 18

Введение. 20

Зачем я написала эту книгу и почему сейчас. 21

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

Как читать данную книгу. 23

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

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

Пролог, или Представьте Data Mesh. 26

Data Mesh в действии. 27

Культура любознательности и жажды экспериментов. 28

Партнерские сервисы, данные и машинное обучение. 29

Невидимая платформа и политики. 35

Неограниченное масштабирование с автономными data-продуктами. 37

Положительный сетевой эффект. 37

Почему необходим переход на Data Mesh?. 38

Дальнейшее развитие. 40

Часть I. Что такое Data Mesh?. 41

ГЛАВА 1. Коротко о Data Mesh. 43

Результаты. 43

Переход. 44

Принципы. 46

Принцип доменного владения. 46

Принцип данных как продукта. 47

Принцип платформы данных самообслуживания. 48

Принцип федеративного цифрового регулирования данных. 48

Взаимодействие принципов. 49

Взгляд на модель Data Mesh. 50

Данные. 51

Операционные данные. 51

Аналитические данные. 52

Резюме. 53

ГЛАВА 2. Принцип доменного владения. 55

Краткое описание стратегии предметно-ориентированного проектирования. 57

Применение стратегии предметно-ориентированного проектирования к данным. 58

Архетипы данных домена. 61

Выровненные с источником данные домена. 62

Агрегированные данные домена. 64

Выровненные с потребителем данные домена. 64

Переход к доменному владению.. 65

Смещение владения данными “вверх по течению”. 65

Определение множества связных моделей. 66

Единый источник истины. 67

Размещение конвейера данных внутри домена. 67

Резюме. 68

ГЛАВА 3. Принцип данных как продукта. 70

Применение концепции продуктового мышления к данным. 72

Базовые атрибуты удобства использования data-продукта. 74

Переход к данным как к продукту. 83

Включение владения data-продуктом в домены. 83

Новый взгляд на используемую терминологию.. 84

Данные как продукт, а не просто актив. 84

“Доверяй, но проверяй” в культуре отношения к данным. 85

Объединение данных и вычислений в один логический элемент. 86

Резюме. 87

ГЛАВА 4. Принцип платформы данных самообслуживания. 88

Платформа Data Mesh: сходства и различия. 90

Обслуживание автономных доменно-ориентированных команд. 90

Управление автономными функционально совместимыми data-продуктами. 92

Платформа с операционными и аналитическими возможностями. 92

Акцент  на использование большинством специалистов широкого профиля. 93

Децентрализованные технологии. 95

Независимые от домена функции. 95

Платформенное мышление в Data Mesh. 96

Возможность автономных команд получать ценность из данных. 98

Обмен ценностью с автономными, но совместимыми data-продуктами. 100

Ускорение обмена ценностью путем снижения когнитивной нагрузки. 101

Масштабирование обмена данными. 102

Поддержка культуры встроенных инноваций. 104

Переход на платформу самообслуживания Data Mesh. 104

Разработайте API и протоколы вначале. 105

Подготовьтесь к попаданию технологии в широкий обиход. 105

Проведите ревизию и упростите сервисы платформы. 106

Разработайте высокоуровневые API для управления data-продуктами. 106

Создайте опыт, а не механизм. 107

Начните с простой основы и развивайте ее. 107

Резюме. 108

ГЛАВА 5. Принцип федеративного цифрового регулирования данных. 109

Системный подход к регулированию данных в Data Mesh. 112

Поддержка динамического равновесия между автономностью доменов
и глобальной совместимостью.. 113

Внедрение динамической топологии по умолчанию.. 117

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

Внедрение федерализации в модель регулирования данных. 118

Федеративная команда. 119

Отраслевые эксперты. 121

Политики. 124

Стимулы. 125

Цифровизация модели регулирования данных. 127

Стандарты, выраженные в коде. 127

Политики, выраженные в коде. 128

Автоматизация тестирования. 129

Автоматизация мониторинга. 129

Переход к федеративному цифровому регулированию.. 130

Переход ответственности к доменам. 130

Внедрение исполнения политик в каждый data-продукт. 130

Автоматизация через интервенцию.. 131

Моделирование данных. 131

Измерение сетевого эффекта. 132

Изменения вместо постоянства. 132

Резюме. 132

Часть II. Почему Data Mesh?. 147

ГЛАВА 6. Переломный момент. 137

Большие надежды, возлагаемые на использование данных. 138

Фундаментальное разделение данных. 140

Новые типы масштабирования. 142

Естественная необходимость. 143

Приближение к плато в извлечении выгоды. 144

Резюме. 145

ГЛАВА 7. После переломного момента. 147

Положительное отношение к изменениям в условиях сложноорганизованного бизнеса. 148

Выравнивание бизнеса, технологий и аналитических данных. 149

Устранение разрыва между операционными и аналитическими данными. 150

Локализация изменений данных в пределах предметных областей. 152

Уменьшение непреднамеренной сложности конвейеров данных. 152

Поддержание скорости работы в условиях расширения. 153

Устранение узких мест, возникающих при централизации и монолитности. 154

Уменьшение зависимости конвейеров данных. 154

Меньше координации в регулировании данных. 156

Внедрение автономности. 157

Повышение соотношения возврата ценности из данных к инвестициям. 158

Абстрагирование технической сложности при помощи платформы данных. 158

Повсеместное внедрение продуктового мышления. 159

Выход за пределы. 159

Резюме. 160

ГЛАВА 8. До переломного момента. 163

Эволюция архитектур аналитических данных. 163

Первое поколение: архитектура хранилища данных. 164

Второе поколение: архитектура озера данных. 165

Третье поколение: многомодульная облачная архитектура. 167

Характеристики архитектуры аналитических данных. 168

Монолитность. 169

Централизованное владение данными. 174

Ориентация на технологии. 175

Резюме. 179

Часть III. Как спроектировать архитектуру Data Mesh. 181

ГЛАВА 9. Логическая архитектура. 183

Доменно-ориентированные интерфейсы для обмена аналитическими данными. 186

Дизайн программного интерфейса. 188

Дизайн интерфейсов аналитических данных. 188

Междоменные зависимости аналитических данных. 189

Data-продукт как архитектурный квант. 190

Структурные компоненты data-продукта. 191

Взаимодействие для обмена данными data-продукта. 197

API для обеспечения поиска и мониторинга данных. 199

Многоплоскостная платформа данных. 199

Плоскость платформы. 200

Плоскость инфраструктуры данных. 201

Плоскость data-продукта. 202

Плоскость mesh. 202

Пример. 202

Внедрение цифровых политик. 203

Sidecar data-продукта. 205

Вычислительный контейнер data-продукта. 206

Порт контроля. 206

Резюме. 207

ГЛАВА 10. Многоплоскостная архитектура платформы данных. 211

Ориентированность на пользовательское восприятие при разработке платформы. 214

Путь разработчика data-продукта. 215

Начало разработки, исследование, начальная загрузка и определение
источника. 217

Сборка, тестирование, развертывание и запуск. 220

Поддержка, развитие и прекращение поддержки. 224

Пользовательское восприятие data-продукта. 227

Начало разработки, исследование, начальная загрузка и определение
источника. 229

Сборка, тестирование, развертывание, запуск. 230

Поддержка, развитие и прекращение поддержки. 231

Резюме. 231

Часть IV. Как спроектировать архитектуру data-продукта. 233

ГЛАВА 11. Проектирование data-продукта на основе возможностей. 235

Возможности data-продукта. 236

Характеристики архитектуры data-продукта. 240

Проектирование модели на основе простоты сложных адаптивных систем. 242

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

Отсутствие центральной оркестровки. 243

Резюме. 243

ГЛАВА 12. Проектирование возможностей потребления, преобразования и предоставления данных  245

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

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

Свойства проектирования данных. 248

Модель предоставления данных. 261

Потребление данных. 263

Архетипы источников данных. 264

Расположение потребляемых данных. 268

Модель потребления данных. 269

Преобразование данных. 271

Программные и непрограммные преобразования данных. 272

Преобразование на основе потока данных. 273

Преобразования данных с использованием машинного обучения. 275

Преобразования данных с временнóй зависимостью.. 275

Проектирование преобразований данных. 275

Резюме. 277

ГЛАВА 13. Проектирование возможностей поиска, интерпретации
и компоновки данных. 278

Поиск, интерпретация, проверка и исследование. 278

Саморегистрация data-продукта для возможности поиска. 281

Поиск при помощи глобального URI 281

Семантические и синтаксические модели. 282

Гарантии данных. 283

Форма данных. 287

Документация. 288

Обнаружение, изучение и понимание data-продуктов. 288

Компоновка данных. 289

Свойства модели потребления данных. 291

Традиционные подходы к компонуемости данных. 292

Модель компонуемости данных. 296

Резюме. 299

ГЛАВА 14. Проектирование возможностей управления, регулирования
и мониторинга данных. 301

Управление жизненным циклом. 301

Модель управления жизненным циклом. 302

Компоненты манифеста data-продукта. 303

Регулирование данных. 304

Модель регулирования данных. 305

Стандартизация политик. 306

Объединение политик и данных. 308

Связывание политик. 309

Отслеживание, отладка и аудит. 309

Проектирование наблюдаемости. 310

Резюме. 314

Часть V. С чего начать. 315

ГЛАВА 15. Стратегия и реализация. 317

Следует ли сегодня переходить на Data Mesh?. 317

Data Mesh как элемент стратегии данных. 322

Фреймворк для реализации Data Mesh. 325

Бизнес-ориентированная реализация. 326

Сквозная итеративная реализация. 332

Эволюционная реализация. 333

Резюме. 349

ГЛАВА 16. Организация и культура. 350

Процесс изменения. 352

Культура. 354

Ценности. 355

Вознаграждение. 358

Внутренняя мотивация. 358

Внешняя мотивация. 359

Структура. 360

Принятие существующей организационной структуры. 360

Определение границ data-продукта. 369

Люди. 373

Роли. 373

Развитие профессиональных навыков. 376

Процесс. 378

Ключевые изменения в процессах. 379

Резюме. 381

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

Дегани Жамак

Дегани Жамак – автор и идеолог парадигмы Data Mesh, технический директор компании Thoughtworks. Профессиональные интересы – распределённые системы и архитектура данных в компании. Выступает за технологическую децентрализацию на всех уровнях, в частности при работе с данными, приложениями и зонами ответственности.

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

Новинка: Марийские народные сказки

Марийские народные сказки

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

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

Марийские народные сказки

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

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

Встречайте: “Ленинград Довлатова. Исторический путеводитель (4-е издание)”

Ленинград Довлатова. Исторический путеводитель

Эта книга — путеводитель по Ленинграду, каким он был в 1944–1978 годах, когда там гулял с няней, ходил в школу, учился в университете, влюблялся, женился, писал рассказы и пытался их напечатать Сергей Довлатов, самый популярный русский прозаик второй половины XX века. Три маршрута проведут читателей по памятным местам, познакомят с городским ландшафтом позднего Ленинграда и историческим контекстом. В четвертом издании появились новые воспоминания, всплыли прежде незамеченные детали, сделаны уточнения и дополнения.

Для широкого круга читателей

Стоит ли говорить, что я вас не забыл и постоянно думаю о Ленинграде. Хотите, перечислю вывески от “Баррикады” до “Титана”? Хотите, выведу проходными дворами от Разъезжей к Марата?.
С. Довлатов «Марш одиноких»

Авторы путеводителя приглашают на прогулку по Ленинграду эпохи самого популярного русского прозаика второй половины XX века Сергея Довлатова. Читатель может выбрать любой из трех маршрутов. Это аннотированный перечень адресов, где Довлатов жил в период 1944–1978 годов, квартир его друзей, учебных заведений, в которых он учился, учреждений, где работал. Или короткие рассказы о магазинах, кинотеатрах, ресторанах, рюмоч­ных, книжных лавках, о том, что происходило в эти годы в городских театрах, на Ленфильме и в Пушкинском доме. А возможно, кому-то покажется интересным проследить судьбоносные события и процессы, политические и эстетические обстоятельства ленинградского периода жизни Сергея Донатовича. В четвертом издании появились новые воспоминания, всплыли прежде незамеченные детали, сделаны уточнения и дополнения.

В наши дни улица Рубинштейна — одна из самых загульных в Петербурге. Не случайно в знаменитом клипе Сергея Шнурова и Анны Парнас «В Питере пить» симпатичные герои, принадлежащие к разным стратам городского общества радуются жизни именно здесь. Это наша барная миля: стрит-фуд, крафтовое пиво и рестораны паназиатской кухни, нарядная молодежь, памятник Довлатову. Место живое, но и опасное: ночные пьянки-гулянки не всегда опрятны и привлекают и различных социальных маргиналов.

После смерти Сталина, 5 марта 1953 года, началось некоторое смягчение идеологической и эстетической цензуры. Уже через несколько дней было прекращено «Дело врачей». Поутих государственный антисемитизм. Из лагерей постепенно стали выпускать «политических». Уже в июне 1953 года в Союз писателей снова приняли Михаила Зощенко.  С сентября 1954 года было отменено раздельное обучение, одновременно в прокат вышел индийский кинофильм «Бродяга», наряду с «Тарзаном» главный экранный хит для подростков эпохи оттепели. Одноклассники подмечали сходство школьника Довлатова с Раджем Капуром, он даже нарисовал автошарж в образе индийской звезды.

Валерий Попов в написанной им биографии Сергея Довлатова с некоторой долей ревности удивляется его невероятному успеху. Он, пишет Попов, «бежал в конце двадцатки» — имеется в виду группа сверстников-ленинградцев, вошедшая в литературу на рубеже 1950–1960-х годов. Ахматова называла их представителями «бронзового века» (пушкинский — «золотой», блоковский — «серебряный»).

Кто-то заметил, что все великие русские писатели, начиная от Пушкина (1799) и заканчивая Львом Толстым (1828), а с ними Гоголь, Белинский, Герцен, Тургенев, Гончаров, Достоевский, Салтыков-Щедрин, Чернышевский теоретически могли быть рождены одной матерью. То же можно сказать и о поколении «бронзового века».

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

Софья Лурье — филолог-итальянист и журналист, одна из авторов путеводителя «Вокруг Петербурга», много лет изучает город Довлатова «на местности», проводя экскурсии по литературному Ленинграду 1950–1970-х.

 

Лев Лурье — историк и журналист. Обладатель «Анциферовской премии» за лучшее исследование истории Петербурга и «Золотого пера» за достижения в журналистике. Один из основателей Санкт-Петербургской классической гимназии. В 2006–2009 возглавлял Дирекцию документального вещания ТРК «Петербург — Пятый канал», вел авторские передачи «Культурный слой» и «Живая история». Автор 15 книг, среди которых «Над вольной Невой. От блокады до „оттепели“», «Поздние Ленинградцы. От застоя до перестройки», «22 смерти, 63 версии», «Петербург Достоевского. Исторический путеводитель».

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

Новинка: “Разработка веб-приложений на PHP 8”

Разработка веб-приложений на PHP 8

На практических примерах описано создание веб-приложений на языке PHP версии 8.x. Даны начала разработки на PHP: установка и настройка Apache 2.4, PHP, MySQL и кроссплатформенной сборки XAMPP, выбор редактора PHP-кода, синтаксис языка, самые полезные функции и нововведения PHP 8.x. Рассмотрено создание веб-приложений с использованием популярного фреймворка Laravel и шаблонизатора Blade. В качестве хранилища данных использованы два сервера – самая современная версия MySQL и набирающая популярность СУБД MongoDB. Раскрыты особенности создания индикатора загрузки файла и разыменовывания массивов, приведены примеры устранения типичных SEO-ошибок, допускаемых программистами, описана работа с PDO, JSON, MP3, Curl, MobileDetec Особое внимание уделяется безопасности веб-приложений – рассматривается, как уберечь их от основных атак, как установить SSL-сертификат и как уберечь сам сервер от неприятностей.
На сайте издательства находятся дополнительные главы, листинги из книги, а также необходимое программное обеспечение.

  • Синтаксис PHP. Нововведения PHP 8.x
  • Объектно-ориентированное программирование на PHP 8.x
  • Кроссплатформенная сборка XAMPP
  • MySQL и MongoDB
  • Работа с PDO, JSON, MP3, Curl, MobileDetect
  • Введение во фреймворк Laravel, шаблонизатор Blade
  • Безопасность веб-приложений

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

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

Немного истории……………………………………………………………………………………………………………………….. 15

Основные нововведения в PHP версии 8………………………………………………………………………………….. 17

Улучшена производительность благодаря компиляции Just-In-Time……………………………….. 17

Именованные аргументы……………………………………………………………………………………………………….. 17

Атрибуты вместо аннотаций PHPDoc…………………………………………………………………………………… 17

Объявление свойств в конструкторе……………………………………………………………………………………… 18

Выражение Match и оператор nullsafe…………………………………………………………………………………. 18

Новые классы, интерфейсы и функции…………………………………………………………………………………. 19

Улучшения в системе типов и обработке ошибок……………………………………………………………….. 19

Прочие улучшения синтаксиса……………………………………………………………………………………………… 20

Часть I.  Теория……………………………………………………………………………. 21

Раздел 1. Быстрый старт………………………………………………………………. 23

Глава 1. Установка необходимого программного обеспечения………………. 25

1.1. Нужно ли устанавливать программное обеспечение?……………………………………………………. 25

1.2. Выбор PHP-редактора и FTP-клиента………………………………………………………………………………. 27

1.3. Установка связки Apache + PHP + MySQL в Windows……………………………………………………… 30

1.3.1. Для опытных пользователей: установка вручную…………………………………………………….. 30

Установка веб-сервера Apache………………………………………………………………………………………… 30

Установка PHP…………………………………………………………………………………………………………………… 32

1.3.2. Установка для новичков (рекомендуется)…………………………………………………………………… 39

Глава 2. Программа на PHP…………………………………………………………………… 43

2.1. Ваша первая программа…………………………………………………………………………………………………….. 43

2.2. Запуск PHP-программы………………………………………………………………………………………………………. 44

2.3. Вывод текста без echo………………………………………………………………………………………………………… 45

Глава 3. Основы синтаксиса PHP………………………………………………………….. 48

3.1. Переменные…………………………………………………………………………………………………………………………. 48

3.1.1. Правила объявления переменных. Имена переменных……………………………………………… 48

3.1.2. Типы данных переменных……………………………………………………………………………………………. 49

3.1.3. Булевы переменные………………………………………………………………………………………………………. 51

3.1.4. Операции над переменными………………………………………………………………………………………… 51

3.1.5. Ссылки……………………………………………………………………………………………………………………………. 52

3.2. Константы……………………………………………………………………………………………………………………………. 53

3.3. Выражения и операции………………………………………………………………………………………………………. 57

3.3.1. Что такое выражение?………………………………………………………………………………………………….. 57

3.3.2. Арифметические операции…………………………………………………………………………………………… 57

3.3.3. Логические выражения…………………………………………………………………………………………………. 58

3.3.4. Битовые операции…………………………………………………………………………………………………………. 58

3.3.5. Приоритеты операций………………………………………………………………………………………………….. 59

3.3.6. Операторы эквивалентности == и ===……………………………………………………………………….. 60

3.3.7. Оператор ?? — сокращенная форма тернарной условной операции……………………… 61

3.3.8. Операции со строками………………………………………………………………………………………………….. 61

3.3.9. Оператор nullsafe………………………………………………………………………………………………………….. 62

3.4. Условный оператор…………………………………………………………………………………………………………….. 63

3.5. Циклы…………………………………………………………………………………………………………………………………… 64

3.5.1. Цикл со счетчиком for………………………………………………………………………………………………….. 64

3.5.2. Цикл while………………………………………………………………………………………………………………………. 65

3.5.3. Цикл do-while…………………………………………………………………………………………………………………. 65

3.5.4. Принудительное завершение цикла и пропуск итерации………………………………………….. 65

3.6. Оператор выбора switch-case…………………………………………………………………………………………….. 66

3.7. Выражение match в PHP 8………………………………………………………………………………………………….. 67

Глава 4. Файл конфигурации php.ini………………………………………………………. 68

4.1. Каталог /etc/php………………………………………………………………………………………………………………….. 68

4.2. Параметры памяти……………………………………………………………………………………………………………… 69

4.3. Zend OPcache……………………………………………………………………………………………………………………….. 69

4.4. Максимальное время выполнения…………………………………………………………………………………….. 71

4.5. Загрузка файлов………………………………………………………………………………………………………………….. 72

4.6. Обработка сессий……………………………………………………………………………………………………………….. 72

4.7. Буферизация вывода…………………………………………………………………………………………………………… 73

4.8. Директива error_reporting()……………………………………………………………………………………………….. 73

4.9. Отключение потенциально опасных функций…………………………………………………………………. 73

4.10. Директива allow_url_open……………………………………………………………………………………………….. 74

Раздел 2. Передача параметров PHP-программам……………….. 75

Глава 5. Методы GET и POST…………………………………………………………………. 77

5.1. Интерфейс CGI…………………………………………………………………………………………………………………….. 77

5.2. Метод GET…………………………………………………………………………………………………………………………… 79

5.3. Метод POST…………………………………………………………………………………………………………………………. 79

Глава 6. Протокол HTTP и интерфейс CGI…………………………………………….. 81

6.1. Специальные переменные окружения CGI……………………………………………………………………….. 81

6.2. Заголовки протокола HTTP……………………………………………………………………………………………….. 82

6.3. Коды ответов протокола HTTP…………………………………………………………………………………………. 83

Глава 7. Передача параметров посредством HTML-формы…………………….. 85

7.1. Создание простейшей формы и ее обработка в сценарии………………………………………………. 85

7.2. Создание пользовательского интерфейса с помощью формы………………………………………… 88

7.2.1. Ввод текста. Теги INPUT и TEXTAREA………………………………………………………………………… 88

7.2.2. Зависимые и независимые переключатели…………………………………………………………………. 90

7.2.3. Списки выбора………………………………………………………………………………………………………………. 91

7.2.4. Форма для передачи файлов………………………………………………………………………………………… 93

7.2.5. Кнопки……………………………………………………………………………………………………………………………. 93

7.3. Проверка параметров формы…………………………………………………………………………………………….. 94

7.3.1. Проверка корректности e-mail……………………………………………………………………………………… 95

7.3.2. Проверка правильности номера банковской карты…………………………………………………… 96

7.3.3. Удаление лишних пробелов…………………………………………………………………………………………. 97

7.4. Директива @csrf шаблонизатора Blade……………………………………………………………………………. 97

Глава 8. Не забываем о поисковой оптимизации…………………………………… 99

8.1. «Дружественные» интернет-адреса…………………………………………………………………………………… 99

8.1.1. Организация SEF URL с помощью файла .htaccess………………………………………………….. 100

8.1.2. Использование фреймворков……………………………………………………………………………………… 102

8.2. Идентификаторы сеансов…………………………………………………………………………………………………. 102

8.3. Производительность сценария………………………………………………………………………………………… 102

8.3.1. Использование шаблонизатора. Сокращение количества инструкций echo………… 103

8.3.2. Включение OPcache……………………………………………………………………………………………………. 103

8.3.3. Включение HTTP 2.0…………………………………………………………………………………………………… 104

8.3.4. Обновление версии PHP……………………………………………………………………………………………… 104

Раздел 3. Массивы и списки…………………………………………………….. 105

Глава 9. Основные операции над массивами и списками…………………….. 107

9.1. Массив и список. Цикл foreach………………………………………………………………………………………… 107

9.2. Функции list() и array()……………………………………………………………………………………………………… 110

9.3. Удаление массива…………………………………………………………………………………………………………….. 112

9.4. Слияние массивов……………………………………………………………………………………………………………… 112

9.5. Функция print_r()………………………………………………………………………………………………………………. 114

9.6. Разыменовывание массива………………………………………………………………………………………………. 115

Глава 10. Функции сортировки массивов…………………………………………….. 117

10.1. Сортировка массивов……………………………………………………………………………………………………… 117

10.2. Функция sort() — сортировка списка…………………………………………………………………………….. 117

10.3. Функция asort() — сортировка массива по значениям………………………………………………… 118

10.4. Функция ksort() — сортировка по ключам……………………………………………………………………. 119

10.5. Функции array_reverse() и shuffle()………………………………………………………………………………… 120

10.6. Собственная функция сортировки…………………………………………………………………………………. 120

10.7. Натуральная сортировка……………………………………………………………………………………………….. 121

Глава 11. Особые операции над массивами…………………………………………. 123

11.1. Добавление и удаление элементов массива…………………………………………………………………. 123

11.2. Упаковка переменных в массив и их извлечение…………………………………………………………. 124

11.3. Получение части массива………………………………………………………………………………………………. 126

11.4. Функции автоматического заполнения массива………………………………………………………….. 126

11.5. Сравнение массивов……………………………………………………………………………………………………….. 127

11.6. Полезные операции над массивом………………………………………………………………………………… 128

11.6.1. Вычисление суммы и произведения всех элементов массива………………………………. 128

11.6.2. Проверка существования элемента в массиве……………………………………………………….. 128

11.6.3. Получение случайного элемента из массива…………………………………………………………. 129

11.6.4. Удаление дубликатов из массива……………………………………………………………………………. 129

11.6.5. Получение значений и ключей массива………………………………………………………………….. 130

11.6.6. Замена местами значений и ключей……………………………………………………………………….. 130

11.6.7. Подсчет значений в массиве…………………………………………………………………………………….. 130

11.6.8. Замена в массиве………………………………………………………………………………………………………. 131

11.6.9. Поиск в массиве…………………………………………………………………………………………………………. 131

11.6.10. Прогулка по массиву………………………………………………………………………………………………. 132

Раздел 4. Функции в PHP………………………………………………………………. 135

Глава 12. Полезные стандартные функции. Работа с датой………………….. 137

12.1. Генератор случайных чисел………………………………………………………………………………………….. 137

12.2. Дата и время……………………………………………………………………………………………………………………. 138

12.2.1. Кратко о timestamp…………………………………………………………………………………………………… 138

12.2.2. Функции strtotime() и checkdate()……………………………………………………………………………… 138

12.2.3. Вывод даты……………………………………………………………………………………………………………….. 139

12.2.4. Использование type=”date”……………………………………………………………………………………… 141

12.2.5. Функция checkdate(): проверка даты на корректность………………………………………….. 141

12.2.6. Класс DateTime: удобная работа с датой и временем…………………………………………… 143

Создание даты по строке………………………………………………………………………………………………… 143

Вычисление количества дней между двумя датами…………………………………………………….. 144

Работа с временнми интервалами……………………………………………………………………………….. 145

12.2.7. Настройка PHP для корректной работы с датами…………………………………………………. 146

12.3. Математические функции………………………………………………………………………………………………. 146

Глава 13. Функции для работы со строками………………………………………… 148

13.1. Основные строковые функции……………………………………………………………………………………….. 148

13.2. Специальные функции замены………………………………………………………………………………………. 152

13.3. Функции преобразования строки………………………………………………………………………………….. 154

13.4. Функции преобразования кодировок……………………………………………………………………………. 156

13.5. Функции для работы с отдельными символами строки. Разыменовывание строки…. 157

13.6. Функция md5() и другие функции шифрования/хеширования. API хеширования
паролей……………………………………………………………………………………………………………………………. 158

13.7. Функции explode() и implode(): работа с подстроками………………………………………………… 159

13.8. Статистические функции……………………………………………………………………………………………….. 160

13.9. Функции вывода текста………………………………………………………………………………………………….. 161

13.10. Установка локали…………………………………………………………………………………………………………. 163

13.11. Форматирование чисел и денежных величин…………………………………………………………….. 164

13.12. Преобразование систем счисления……………………………………………………………………………… 164

13.13. Строки в PHP 7/8…………………………………………………………………………………………………………… 165

Глава 14. Работаем с файлами и каталогами………………………………………… 166

14.1. Права доступа в UNIX……………………………………………………………………………………………………. 166

14.2. Чтение файла…………………………………………………………………………………………………………………… 168

14.2.1. Функции fopen() и fread()………………………………………………………………………………………….. 169

14.2.2. Функция file(): построчное чтение файла……………………………………………………………….. 171

14.2.3. Чтение всего файла: функция file_get_contents()……………………………………………………. 172

14.3. Запись файла…………………………………………………………………………………………………………………… 172

14.4. Создание временных файлов…………………………………………………………………………………………. 173

14.5. Работа с CSV-файлами…………………………………………………………………………………………………… 173

14.6. Специальные функции для работы с файлами…………………………………………………………….. 175

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

14.6.2. Работа с правами доступа……………………………………………………………………………………….. 176

14.6.3. Копирование, переименование и удаление файлов………………………………………………. 177

14.6.4. Время доступа к файлу…………………………………………………………………………………………….. 178

14.6.5. Другие полезные функции………………………………………………………………………………………… 178

14.7. Совместный доступ к файлу………………………………………………………………………………………….. 179

14.8. Функции для работы с каталогами……………………………………………………………………………….. 180

Глава 15. Вывод графических изображений средствами PHP……………….. 182

15.1. Библиотека GD………………………………………………………………………………………………………………… 182

15.1.1. Получение информации об изображении……………………………………………………………….. 182

15.1.2. Конвертирование графических форматов………………………………………………………………. 185

15.1.3. Вывод текста поверх картинки. Задание цвета……………………………………………………… 187

15.1.4. Прозрачность…………………………………………………………………………………………………………….. 190

15.1.5. Рисование графических примитивов……………………………………………………………………….. 191

15.1.6. Поворот изображения………………………………………………………………………………………………. 193

15.2. Изменение размера изображения………………………………………………………………………………….. 193

15.3. Создание водяных знаков………………………………………………………………………………………………. 195

15.4. Поддержка графического формата WebP…………………………………………………………………….. 197

Глава 16. Работа с сетевыми сокетами в PHP. Сетевые функции…………. 199

16.1. Еще раз о том, что такое сокет………………………………………………………………………………………. 199

16.2. Функция fsockopen()………………………………………………………………………………………………………… 199

16.3. Примеры работы с сокетами………………………………………………………………………………………….. 200

16.3.1. Работаем с протоколом HTTP…………………………………………………………………………………. 200

16.3.2. Отправка почты с использованием сокетов……………………………………………………………. 202

16.3.3. Простейший клиент/сервер………………………………………………………………………………………. 204

16.4. Блокирующий и неблокирующий режимы сокета……………………………………………………….. 206

16.5. DNS-функции…………………………………………………………………………………………………………………… 206

Глава 17. Собственные функции………………………………………………………….. 208

17.1. Зачем нужны собственные функции?……………………………………………………………………………. 208

17.2. Особенности функций в PHP………………………………………………………………………………………….. 208

17.3. Объявление функции………………………………………………………………………………………………………. 209

17.4. Области видимости функции…………………………………………………………………………………………. 211

17.5. Вложенность функций……………………………………………………………………………………………………. 211

17.6. Переменное число аргументов………………………………………………………………………………………. 213

17.7. Передача массивов в качестве параметров………………………………………………………………….. 214

17.8. Передача аргументов по ссылке……………………………………………………………………………………. 216

17.9. Генераторы……………………………………………………………………………………………………………………… 217

17.10. Полезные примеры……………………………………………………………………………………………………….. 219

17.10.1. Получение реального IP-адреса клиента……………………………………………………………… 219

17.10.2. Генерирование сложного пароля………………………………………………………………………….. 220

17.10.3. Рекурсивное удаление каталога……………………………………………………………………………. 220

17.10.4. Отправка файла в браузер……………………………………………………………………………………… 221

17.10.5. Сжатие файла «на лету»………………………………………………………………………………………… 222

Раздел 5. База данных MySQL…………………………………………………….. 225

Глава 18. Установка MySQL на VDS……………………………………………………. 227

18.1. Несколько вводных слов………………………………………………………………………………………………… 227

18.2. Установка сервиса MySQL…………………………………………………………………………………………….. 227

18.3. Настройка MySQL………………………………………………………………………………………………………….. 228

18.4. Создание MySQL-пользователя…………………………………………………………………………………….. 229

18.5. Запуск и останов сервера………………………………………………………………………………………………. 230

Глава 19. Основы SQL…………………………………………………………………………. 231

19.1. Немного истории…………………………………………………………………………………………………………….. 231

19.2. Преимущества SQL…………………………………………………………………………………………………………. 231

19.3. Как выглядят запросы?…………………………………………………………………………………………………… 232

19.4. Что такое база данных?…………………………………………………………………………………………………. 233

19.5. Создание таблиц…………………………………………………………………………………………………………….. 234

19.6. Добавление записей в таблицу……………………………………………………………………………………… 238

19.7. Обновление записей……………………………………………………………………………………………………….. 238

19.8. Выборка записей…………………………………………………………………………………………………………….. 239

19.9. Удаление записей……………………………………………………………………………………………………………. 240

19.10. Встроенные функции……………………………………………………………………………………………………. 241

19.11. Группировка записей. Сложные запросы…………………………………………………………………… 242

19.12. Копирование записей из одной таблицы в другую……………………………………………………. 245

19.13. Кеширование запросов………………………………………………………………………………………………… 245

Глава 20. Функции для работы с MySQL……………………………………………… 248

20.1. Способы работы с базой данных………………………………………………………………………………….. 248

20.2. Расширение mysqli………………………………………………………………………………………………………….. 249

20.2.1. Подключение к серверу MySQL………………………………………………………………………………. 249

20.2.2. Передача запросов серверу……………………………………………………………………………………… 250

20.2.3. Метод real_escape_string()………………………………………………………………………………………. 252

20.3. Расширение PDO……………………………………………………………………………………………………………… 252

20.3.1. Соединение с базой данных…………………………………………………………………………………….. 252

20.3.2. Выполнение запросов и чтение результата……………………………………………………………. 254

20.3.3. Получение данных……………………………………………………………………………………………………. 256

20.3.4. Особенности использования операторов LIKE, LIMIT и IN…………………………………… 257

20.3.5. Имена таблиц и полей при работе с PDO……………………………………………………………….. 258

20.3.6. Запросы вставки и обновление………………………………………………………………………………… 258

Глава 21. Работа с базой данных в Laravel…………………………………………… 260

21.1. Способы работы с базой данных………………………………………………………………………………….. 260

21.2. Сырые (прямые) запросы……………………………………………………………………………………………….. 261

21.3. Конструктор запросов……………………………………………………………………………………………………. 262

21.4. Система Eloquent…………………………………………………………………………………………………………….. 265

Раздел 6. Инструменты для создания
сложных проектов……………………………………………………………………… 269

Глава 22. Разработка собственного шаблонизатора……………………………… 271

22.1. Организация файлов и каталогов проекта……………………………………………………………………. 271

22.2. Выносим параметры в отдельный файл……………………………………………………………………….. 273

22.3. Подключение дополнительных файлов………………………………………………………………………… 274

22.3.1. Инструкции include и require…………………………………………………………………………………… 274

22.3.2. Альтернативный способ подключения сценариев…………………………………………………. 275

22.3.3. Инструкции include_once и require_once……………………………………………………………….. 277

22.4. Шаблоны…………………………………………………………………………………………………………………………. 277

Глава 23. Шаблонизатор Blade……………………………………………………………… 282

23.1. Введение в Blade……………………………………………………………………………………………………………… 282

23.2. Вывод значений скалярных переменных……………………………………………………………………… 283

23.3. Директивы Blade……………………………………………………………………………………………………………… 283

23.3.1. Директива @if……………………………………………………………………………………………………………. 283

23.3.2. Директивы @for, @foreach и @while………………………………………………………………………. 284

23.3.3. Директивы @forelse и @endforelse………………………………………………………………………….. 284

23.4. Включение представлений. Директива @include………………………………………………………… 285

23.5. Директива @csrf……………………………………………………………………………………………………………… 287

Глава 24. Объектно-ориентированное программирование…………………… 288

24.1. Основы ООП…………………………………………………………………………………………………………………….. 288

24.2. Классы и объекты…………………………………………………………………………………………………………… 289

24.3. Конструкторы и деструкторы класса…………………………………………………………………………… 291

24.4. Наследование классов. Полиморфизм………………………………………………………………………….. 293

24.5. Область видимости членов класса………………………………………………………………………………… 294

24.6. Абстрактные классы и методы………………………………………………………………………………………. 295

24.7. Служебное слово final……………………………………………………………………………………………………. 295

24.8. Клонирование объектов…………………………………………………………………………………………………. 296

24.9. Константы — члены класса…………………………………………………………………………………………… 297

24.10. Статические члены класса…………………………………………………………………………………………… 297

24.11. Оператор instanceof……………………………………………………………………………………………………… 298

24.12. Итераторы……………………………………………………………………………………………………………………… 298

24.13. Пространства имен……………………………………………………………………………………………………….. 299

24.13.1. Общая концепция……………………………………………………………………………………………………. 299

24.13.2. Объявление пространства имен…………………………………………………………………………….. 300

24.13.3. Псевдонимы…………………………………………………………………………………………………………….. 301

24.14. Типажи…………………………………………………………………………………………………………………………… 302

24.15. Вызов метода или свойства класса выражением………………………………………………………. 303

24.16. Генераторы……………………………………………………………………………………………………………………. 303

24.17. Атрибуты……………………………………………………………………………………………………………………….. 305

Глава 25. Хранение данных в Cookies и сессиях…………………………………… 306

25.1. Зачем нужны Cookies и сессии?…………………………………………………………………………………….. 306

25.2. Cookies или хранение данных на стороне клиента……………………………………………………… 306

25.2.1. Что такое Cookies?……………………………………………………………………………………………………. 306

25.2.2. Установка Cookies…………………………………………………………………………………………………….. 307

25.2.3. Удаление Cookies……………………………………………………………………………………………………… 308

25.2.4. Организация корзины с помощью Cookies……………………………………………………………… 309

25.3. Механизм сессий…………………………………………………………………………………………………………….. 311

25.3.1. Для чего нужны сессии?…………………………………………………………………………………………… 311

25.3.2. Автоматическое создание сессии……………………………………………………………………………. 312

25.3.3. Хранение данных в сессии……………………………………………………………………………………….. 312

Глава 26. Обработка исключений………………………………………………………… 313

26.1. Введение в обработку исключений……………………………………………………………………………….. 313

26.2. Блок catch………………………………………………………………………………………………………………………… 314

26.3. Блок finally………………………………………………………………………………………………………………………. 315

26.4. Глобальный обработчик исключений………………………………………………………………………….. 317

Глава 27. Контроль версий…………………………………………………………………… 318

27.1. Выбор системы контроля версий…………………………………………………………………………………… 318

27.2. Первоначальная настройка…………………………………………………………………………………………… 319

27.3. Создание нового репозитория или получение его по существующему URL-адресу.. 319

27.4. Операции с файлами. Перемещение и удаление версий файлов репозитория………….. 320

27.5. Сохранение и восстановление незавершенных изменений………………………………………… 321

27.6. Просмотр изменений и создание коммитов (фиксация изменений)…………………………….. 321

27.7. Коллективная работа……………………………………………………………………………………………………… 322

27.8. Просмотр и изучение истории изменений файлов проекта…………………………………………. 322

27.9. Откат изменений. Удаление ошибок и корректировка созданной истории………………. 323

27.10. Синхронизация с удаленным репозиторием.
Регистрация удаленного репозитория и обмен изменениями……………………………………. 323

Глава 28. Тестирование PHP-сценариев……………………………………………….. 324

28.1. Программа работает, но не так, как нам нужно…………………………………………………………… 324

28.2. «Самодельные» точки останова……………………………………………………………………………………. 325

28.3. Система автоматического тестирования……………………………………………………………………… 327

28.4. Директива error_reporting……………………………………………………………………………………………… 330

Часть II.  Практика……………………………………………………………………. 331

Раздел 7. Разработка основных элементов сайта…………… 333

Глава 29. Загрузка файлов на сервер……………………………………………………. 335

29.1. Что нужно знать о загрузке файлов на сервер?……………………………………………………………. 335

29.2. Реализация загрузки файла……………………………………………………………………………………………. 338

29.3. Загрузка нескольких файлов………………………………………………………………………………………….. 340

29.4. Индикатор загрузки файла…………………………………………………………………………………………….. 342

29.4.1. Некоторые теоретические предпосылки………………………………………………………………… 342

29.4.2. Пример практической реализации………………………………………………………………………….. 345

29.5. Проблемы при загрузке файлов…………………………………………………………………………………….. 352

Глава 30. Использование FTP-функций……………………………………………….. 353

30.1. Функции для работы с FTP…………………………………………………………………………………………….. 353

30.2. Примеры использования FTP-функций…………………………………………………………………………. 356

Глава 31. Отправка и прием почты………………………………………………………. 359

31.1. Отправка почты средствами PHP: функция mail()……………………………………………………….. 359

31.1.1. Использование функции…………………………………………………………………………………………… 359

31.1.2. Подробно о настройке сервера……………………………………………………………………………….. 360

31.2. Класс PHPMailer. Разработка сценария автоматической рассылки прайс-листа…… 361

31.3. Получение писем по протоколу POP3…………………………………………………………………………… 365

31.4. Получение писем по протоколу IMAP………………………………………………………………………….. 367

Глава 32. Введение в PEAR………………………………………………………………….. 370

32.1. Серьезные проекты и PEAR……………………………………………………………………………………………. 370

32.2. Пример использования класса DB…………………………………………………………………………………. 372

Глава 33. Импорт и экспорт данных…………………………………………………….. 375

33.1. Импорт прайс-листов из формата CSV в базу данных MySQL………………………………….. 375

33.2. Преобразование файлов Excel в CSV с помощью PHP. Импорт прайсов из Excel…….. 379

33.3. Работа с XML-файлами………………………………………………………………………………………………….. 380

33.3.1. Парсинг XML-файла…………………………………………………………………………………………………. 380

33.3.2. Генерирование XML-файла…………………………………………………………………………………….. 382

Глава 34. Работаем с MP3…………………………………………………………………….. 384

34.1. Формат MP3…………………………………………………………………………………………………………………….. 384

34.2. Библиотека PEAR……………………………………………………………………………………………………………. 385

34.3. Вывод ID3-тегов……………………………………………………………………………………………………………… 386

34.4. Редактирование ID3-тегов……………………………………………………………………………………………… 388

34.5. Удаление тега………………………………………………………………………………………………………………….. 388

Глава 35. Расширение cURL: практические примеры………………………….. 390

35.1. Этот загадочный cURL…………………………………………………………………………………………………… 390

35.2. Авторизация на сайте и загрузка файла после нее……………………………………………………… 392

35.3. Замена функции file_get_contents() с помощью cURL…………………………………………………. 395

35.4. Загрузка файла через FTP………………………………………………………………………………………………. 395

35.5. Проверка доступности сайта…………………………………………………………………………………………. 396

Раздел 8. Введение в Laravel…………………………………………………….. 399

Глава 36. Фреймворк или чистый PHP-код?………………………………………… 401

36.1. Что такое фреймворк?…………………………………………………………………………………………………….. 401

36.2. Обзор популярных PHP-фреймворков…………………………………………………………………………… 402

36.2.1. Zend Framework и The Laminas Project……………………………………………………………………. 402

36.2.2. Laravel………………………………………………………………………………………………………………………… 403

36.2.3. Symfony……………………………………………………………………………………………………………………… 403

36.2.4. Yii………………………………………………………………………………………………………………………………… 403

36.2.5. CodeIgniter…………………………………………………………………………………………………………………. 404

Глава 37. Установка Laravel на VDS с Ubuntu Linux…………………………….. 405

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

37.2. Установка необходимого ПО…………………………………………………………………………………………. 405

37.2.1. Установка веб-сервера Apache………………………………………………………………………………… 405

37.2.2. Установка PHP и его расширений…………………………………………………………………………… 407

37.2.3. Установка Laravel…………………………………………………………………………………………………….. 409

Глава 38. Определяем маршруты…………………………………………………………. 412

38.1. Запросы протокола HTTP……………………………………………………………………………………………… 412

38.2. Модель. Представление. Контроллер…………………………………………………………………………… 413

38.3. Простейшие маршруты. Сопоставление маршрута с контроллером………………………… 414

38.4. Параметры в маршрутах……………………………………………………………………………………………….. 415

38.5. Имена маршрутов…………………………………………………………………………………………………………… 416

38.6. Префиксы маршрутов…………………………………………………………………………………………………….. 417

38.7. Маршруты новостной страницы…………………………………………………………………………………… 417

Глава 39. Пишем контроллер……………………………………………………………….. 418

39.1. Создание контроллера…………………………………………………………………………………………………… 418

39.2. Простой метод: List()………………………………………………………………………………………………………. 419

39.3. Методы с параметрами: View() и GetArchiveContent()………………………………………………… 420

39.4. Обработка POST-запроса………………………………………………………………………………………………. 421

Глава 40. Создаем представление…………………………………………………………. 422

40.1. Каталог resources/views………………………………………………………………………………………………….. 422

40.2. Получение данных из контроллера………………………………………………………………………………. 423

40.3. Очистка кеша страниц и кеша представлений…………………………………………………………….. 424

Глава 41. Запрос и ответ………………………………………………………………………. 425

41.1. Работаем с запросами. Класс Request…………………………………………………………………………… 425

41.1.1. Основные методы……………………………………………………………………………………………………… 425

41.1.2. Получение информации о пользователе/запросе………………………………………………….. 426

41.1.3. Работа с файлами……………………………………………………………………………………………………… 427

41.1.4. Собирая все вместе…………………………………………………………………………………………………… 427

41.2. Класс Response………………………………………………………………………………………………………………… 428

Глава 42. Работа с данными…………………………………………………………………. 430

42.1. Файловая система…………………………………………………………………………………………………………… 430

42.1.1. Конфигурация фасада Storage………………………………………………………………………………… 430

42.1.2. Методы фасада Storage……………………………………………………………………………………………. 431

42.1.3. Загрузка файлов на сервер………………………………………………………………………………………. 432

42.1.4. Метод download()……………………………………………………………………………………………………… 433

42.2. Сессии………………………………………………………………………………………………………………………………. 433

42.3. Работа с Cookies……………………………………………………………………………………………………………… 435

Раздел 9. Безопасность сайта………………………………………………….. 437

Глава 43. Как взламываются сайты и как этому помешать?
Основные сведения………………………………………………………………………………. 439

43.1. Основные способы взлома сайта…………………………………………………………………………………… 439

43.2. Два самых распространенных метода взлома…………………………………………………………….. 441

43.2.1. Межсайтовый скриптинг………………………………………………………………………………………….. 441

43.2.2. SQL-инъекции……………………………………………………………………………………………………………. 443

43.3. Остальные методы………………………………………………………………………………………………………….. 446

Глава 44. SSL-сертификат для сайта…………………………………………………….. 447

44.1. Выбор сертификата………………………………………………………………………………………………………… 447

44.1.1. Основные типы сертификатов………………………………………………………………………………….. 447

44.1.2. Какой тип сертификата выбрать?……………………………………………………………………………. 448

44.1.3. Особенности SSL-сертификатов разных типов………………………………………………………. 448

44.2. Где купить SSL-сертификат?………………………………………………………………………………………….. 451

44.3. Установка сертификата на веб-сервер………………………………………………………………………….. 452

44.3.1. Веб-сервер Apache2………………………………………………………………………………………………….. 452

44.3.2. Веб-сервер Ngnix……………………………………………………………………………………………………….. 453

Глава 45. Защита PHP с помощью конфигурационного файла…………….. 454

45.1. Конфигурационный файл php.ini………………………………………………………………………………….. 454

45.2. Отключение потенциально опасных функций……………………………………………………………… 455

45.3. Рекомендованные значения некоторых конфигурационных директив……………………… 455

Раздел 10. Полезные сведения………………………………………………….. 457

Глава 46. Устанавливаем визуальный редактор Summernote……………….. 459

46.1. Знакомство с редактором………………………………………………………………………………………………. 459

46.2. Интеграция Summernote и Laravel………………………………………………………………………………… 459

Глава 47. Работа с MongoDB средствами PHP………………………………………. 462

47.1. Что такое MongoDB?………………………………………………………………………………………………………. 462

47.2. Настройка интерпретатора PHP…………………………………………………………………………………… 463

47.3. Добавление данных в MongoDB……………………………………………………………………………………. 465

47.4. Чтение информации из базы данных…………………………………………………………………………….. 467

47.5. Преобразование объекта в массив………………………………………………………………………………… 469

Приложения…………………………………………………………………………………… 473

Приложение 1. Шаблоны проектирования…………………………………………… 475

П1.1. Введение в шаблоны проектирования………………………………………………………………………….. 475

П1.2. Шаблон «Стратегия»……………………………………………………………………………………………………… 476

П1.3. Шаблон «Адаптер»………………………………………………………………………………………………………… 477

П1.4. Шаблон «Фабрика»………………………………………………………………………………………………………… 478

П1.5. Шаблон «Одиночка»………………………………………………………………………………………………………. 479

Приложение 2. Профайлинг…………………………………………………………………. 481

П2.1. Что такое профайлинг?………………………………………………………………………………………………….. 481

П2.2. Типы профайлеров…………………………………………………………………………………………………………. 481

П2.3. Профайлер Xdebug…………………………………………………………………………………………………………. 482

П2.4. XHProf……………………………………………………………………………………………………………………………… 482

Приложение 3. Виртуальная машина HHVM……………………………………….. 485

П3.1. Что такое HHVM?………………………………………………………………………………………………………….. 485

П3.2. Подойдет ли HHVM именно для вас?…………………………………………………………………………… 486

П3.3. Установка HHVM…………………………………………………………………………………………………………… 487

П3.4. Настройка HHVM………………………………………………………………………………………………………….. 487

П3.5. Язык Hack……………………………………………………………………………………………………………………….. 489

Приложение 4. Описание электронного архива……………………………………. 490

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

Денис_Николавич_Колисниченко

Колисниченко Денис Николаевич, инженер-программист и системный администратор. Имеет богатый опыт эксплуатации и создания локальных сетей от домашних до уровня предприятия, разработки приложений для различных платформ. Автор более 50 книг компьютерной тематики, в том числе “Microsoft Windows 10. Первое знакомство”, “Самоучитель Microsoft Windows 8”, “Программирование для Android 5. Самоучитель”, “PHP и MySQL. Разработка веб-приложений”, “Планшет и смартфон на базе Android для ваших родителей”, “”Linux. От новичка к профессионалу” и др.