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

Представляем “Псковские сказки”

Псковские сказки

Псковская земля хранит множество старинных песен, легенд, преданий и, конечно, сказок. В этот сборник сказок вошли самые интересные и понятные детям. Сказочные герои — знаменитый Бычок – смоляной бочок, Медведь на липовой ноге, Лутонька, ленивая и работящая сестры широко известны. Для самых маленьких читателей в конце книги есть словарик, в котором объясняются устаревшие и диалектные слова. Красочные иллюстрации расскажут о местных народных костюмах, убранстве избы и предметах домашней утвари, а также о традиционных  блюдах, занятиях и развлечениях.

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

Псковские сказки

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

Сказки народов России

Россия — большая и загадочная страна. В ней проживает около 147 млн человек. Она простирается от Европы и до Аляски.
В каждом регионе здесь свои сказки. И мы хотим познакомить с ними российских детей.
Каждую книгу мы снабжаем картой и предисловием, чтобы объяснить ребенку, о какой части России идет речь — о заснеженной Сибири, о ветреном побережье Тихого океана или о жарких степях Калмыкии? И в каждой книге собраны веселые, увлекательные, а иногда и пугающие сказки, прекрасно проиллюстрированные современными российскими художниками.

Художник

Екатерина Ефимова

Ефимова Екатерина. Родилась и выросла в Пскове — городе с богатой историей и уникальными народными традициями. Окончила РГПУ им. А.И. Герцена, Санкт-Петербург. Художник декоративно-прикладного искусства и народных промыслов, преподаватель специальных дисциплин Псковского политехнического колледжа. Участник и лауреат областных и всероссийских конкурсов и выставок.

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

Представляем 5-е издание книги “PHP глазами хакера”

PHP глазами хакера. 5-е издание

В книге рассмотрены вопросы безопасности и оптимизации сценариев на языке PHP. Большое внимание уделено описанию типичных ошибок программистов, благодаря которым, хакеры проникают на сервер, а также представлены методы и приведены практические рекомендации противостояния внешним атакам. Показаны реальные примеры взлома Web-сайтов и рекомендации, которые помогут создавать более защищенные сайты. В 5-м издании переписаны примеры с учетом современных возможностей PHP 8 и добавлена глава по безопасности во фреймворках Laravel и Symfony.

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

Создание безопасных Web-приложений на PHP

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

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

В 5-м издании переписаны примеры с учетом современных возможностей PHP 8 и добавлена глава по безопасности во фреймворках Laravel и Symfony.

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

Предисловие к пятому изданию……………………………………………………………….. 7

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

Об авторе……………………………………………………………………………………………………………………………………. 10

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

Глава 1. Введение в PHP………………………………………………………………………… 11

1.1. Что такое PHP?……………………………………………………………………………………………………………………. 11

1.2. Создание сайта для Apache……………………………………………………………………………………………….. 12

1.3. Как работает PHP?……………………………………………………………………………………………………………… 15

1.4. Чего ждать дальше?……………………………………………………………………………………………………………. 17

Глава 2. Основы PHP…………………………………………………………………………….. 18

2.1. PHP-инструкции………………………………………………………………………………………………………………….. 18

2.2. Подключение файлов………………………………………………………………………………………………………….. 23

2.3. Вывод данных……………………………………………………………………………………………………………………… 27

2.4. Правила кодирования…………………………………………………………………………………………………………. 28

2.4.1. Комментарии…………………………………………………………………………………………………………………. 29

2.4.2. Чувствительность………………………………………………………………………………………………………….. 30

2.4.3. Переменные……………………………………………………………………………………………………………………. 32

2.4.4. Основные операции………………………………………………………………………………………………………. 35

2.4.5. Область видимости……………………………………………………………………………………………………….. 36

2.4.6. Константы……………………………………………………………………………………………………………………… 38

2.5. Управление выполнением программы………………………………………………………………………………. 39

2.6. Циклы…………………………………………………………………………………………………………………………………… 49

2.6.1. Цикл for………………………………………………………………………………………………………………………….. 50

2.6.2. Цикл while………………………………………………………………………………………………………………………. 52

2.6.3. Бесконечные циклы………………………………………………………………………………………………………. 52

2.6.4. Управление циклами…………………………………………………………………………………………………….. 53

2.7. Прерывание работы программы……………………………………………………………………………………….. 55

2.8. Функции……………………………………………………………………………………………………………………………….. 56

2.9. Классы…………………………………………………………………………………………………………………………………. 63

2.10. Массивы…………………………………………………………………………………………………………………………….. 66

2.11. Обработка ошибок……………………………………………………………………………………………………………. 69

2.12. Передача данных……………………………………………………………………………………………………………… 70

2.12.1. Переменные окружения………………………………………………………………………………………………. 71

2.12.2. Передача параметров…………………………………………………………………………………………………. 72

2.12.3. Метод GET…………………………………………………………………………………………………………………… 76

2.12.4. Метод POST…………………………………………………………………………………………………………………. 78

2.12.5. Скрытые параметры…………………………………………………………………………………………………… 80

2.13. Хранение параметров посетителя…………………………………………………………………………………… 81

2.13.1. Сеансы…………………………………………………………………………………………………………………………. 83

2.13.2. Cookies…………………………………………………………………………………………………………………………. 87

2.13.3. Безопасность cookie……………………………………………………………………………………………………. 91

2.14. Файлы………………………………………………………………………………………………………………………………… 93

2.14.1. Открытие файла………………………………………………………………………………………………………….. 94

2.14.2. Закрытие файла…………………………………………………………………………………………………………… 95

2.14.3. Чтение данных…………………………………………………………………………………………………………….. 95

2.14.4. Дополнительные функции чтения……………………………………………………………………………… 98

2.14.5. Запись данных…………………………………………………………………………………………………………….. 98

2.14.6. Позиционирование в файле………………………………………………………………………………………… 99

2.14.7. Свойства файлов……………………………………………………………………………………………………….. 100

Глава 3. Безопасность………………………………………………………………………….. 102

3.1. Комплексная защита………………………………………………………………………………………………………… 103

3.2. Права доступа…………………………………………………………………………………………………………………… 105

3.3. Как взламывают сценарии?……………………………………………………………………………………………… 105

3.4. Основы защиты сценариев……………………………………………………………………………………………….. 107

3.4.1. Реальный пример ошибки…………………………………………………………………………………………… 108

3.4.2. Рекомендации по защите……………………………………………………………………………………………. 111

3.4.3. Тюнинг PHP…………………………………………………………………………………………………………………. 112

3.5. Проверка корректности данных………………………………………………………………………………………. 113

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

3.6.1. Функции регулярных выражений PHP………………………………………………………………………. 119

Функция ereg()…………………………………………………………………………………………………………….. 119

Функция eregi()……………………………………………………………………………………………………………. 119

Функция ereg_replace()………………………………………………………………………………………………. 119

Функция eregi_replace()……………………………………………………………………………………………… 120

Функция split()…………………………………………………………………………………………………………….. 120

Функция spliti()……………………………………………………………………………………………………………. 120

3.6.2. Использование регулярных выражений PHP……………………………………………………………. 120

3.6.3. Использование регулярных выражений Perl…………………………………………………………….. 125

3.6.4. Функции регулярных выражений Perl……………………………………………………………………….. 127

Функция preg_match()………………………………………………………………………………………………… 127

Функция preg_match_all()………………………………………………………………………………………….. 128

Функция preg_split()…………………………………………………………………………………………………… 129

3.6.5. Проверка e-mail…………………………………………………………………………………………………………… 129

3.6.6. Советы по использованию регулярных выражений………………………………………………… 129

3.7. Что и как фильтровать?…………………………………………………………………………………………………….. 130

3.8. Базы данных……………………………………………………………………………………………………………………… 134

3.8.1. Основы баз данных…………………………………………………………………………………………………….. 134

3.8.2. Атака SQL Injection…………………………………………………………………………………………………….. 136

3.8.3. Реальное экранирование……………………………………………………………………………………………. 145

3.8.4. Параметризированные запросы………………………………………………………………………………… 146

3.8.5. Работа с файлами……………………………………………………………………………………………………….. 151

3.8.6. Практика работы с базами данных…………………………………………………………………………… 151

3.8.7. Проверка URL……………………………………………………………………………………………………………… 152

3.9. Работа с файлами……………………………………………………………………………………………………………… 153

3.10. Криптография………………………………………………………………………………………………………………….. 154

3.10.1. Симметричное шифрование…………………………………………………………………………………….. 154

3.10.2. Асимметричное шифрование…………………………………………………………………………………… 155

3.10.3. Необратимое шифрование……………………………………………………………………………………….. 156

3.10.4. Практика использования шифрования……………………………………………………………………. 158

3.11. Атака Cross-Site Scripting………………………………………………………………………………………………… 164

3.12. Флуд…………………………………………………………………………………………………………………………………. 169

3.12.1. Защита от флуда сообщениями……………………………………………………………………………….. 169

3.12.2. Защита от накрутки голосований……………………………………………………………………………. 170

3.13. Изменения формы и атака CSRF……………………………………………………………………………………. 172

3.14. Сопровождение журнала……………………………………………………………………………………………….. 175

3.15. Защита от неправомерных изменений………………………………………………………………………….. 176

3.16. Панель администратора………………………………………………………………………………………………… 178

3.17. Опасная переменная $REQUEST_URI…………………………………………………………………………… 179

3.18. CAPTCHA………………………………………………………………………………………………………………………… 180

3.19. Сериализация………………………………………………………………………………………………………………….. 185

Глава 4. Оптимизация………………………………………………………………………….. 188

4.1. Алгоритм……………………………………………………………………………………………………………………………. 188

4.2. Слабые места…………………………………………………………………………………………………………………….. 190

4.3. Базы данных……………………………………………………………………………………………………………………… 191

4.3.1. Оптимизация запросов……………………………………………………………………………………………….. 192

4.3.2. Оптимизация СУБД…………………………………………………………………………………………………….. 196

4.3.3. Выборка необходимых данных…………………………………………………………………………………. 198

4.3.4. Изучайте систему………………………………………………………………………………………………………… 200

4.4. Оптимизация PHP……………………………………………………………………………………………………………… 202

4.4.1. Кеширование вывода………………………………………………………………………………………………….. 202

4.4.2. Кеширование страниц………………………………………………………………………………………………… 203

4.5. Оптимизация или безопасность?……………………………………………………………………………………… 205

4.6. Переход на PHP 8……………………………………………………………………………………………………………… 207

Глава 5. Примеры работы с PHP………………………………………………………….. 208

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

5.2. Проверка корректности файла………………………………………………………………………………………… 213

5.3. Запретная зона………………………………………………………………………………………………………………….. 216

5.3.1. Аутентификация………………………………………………………………………………………………………….. 216

5.3.2. Защита сценариев правами доступа сервера Apache……………………………………………… 223

5.4. Работа с сетью…………………………………………………………………………………………………………………… 224

5.4.1. Работа с DNS……………………………………………………………………………………………………………….. 225

5.4.2. Протоколы…………………………………………………………………………………………………………………… 225

5.4.3. Сокеты………………………………………………………………………………………………………………………….. 226

Инициализация…………………………………………………………………………………………………………… 227

Серверные функции……………………………………………………………………………………………………. 227

Клиентские функции…………………………………………………………………………………………………… 228

Обмен данными…………………………………………………………………………………………………………… 229

Управление сокетами…………………………………………………………………………………………………. 230

5.5. Сканер портов…………………………………………………………………………………………………………………… 231

5.6. FTP-клиент низкого уровня………………………………………………………………………………………………. 234

5.7. Работа с электронной почтой………………………………………………………………………………………….. 237

5.7.1. Протокол SMTP…………………………………………………………………………………………………………… 237

5.7.2. Функция mail()……………………………………………………………………………………………………………… 239

5.7.3. Соединение с SMTP-сервером……………………………………………………………………………………. 241

5.7.4. Безопасность электронной почтовой службы………………………………………………………….. 242

5.7.5. Производительность отправки почты……………………………………………………………………….. 242

5.8. Защита ссылок………………………………………………………………………………………………………………….. 244

5.9. PHP в руках хакера…………………………………………………………………………………………………………… 245

5.10. Уловки……………………………………………………………………………………………………………………………… 247

5.10.1. Переадресация………………………………………………………………………………………………………….. 247

5.10.2. Всплывающие окна…………………………………………………………………………………………………… 249

5.10.3. Тег <iframe>………………………………………………………………………………………………………………. 250

5.10.4. Стой, не уходи!………………………………………………………………………………………………………….. 251

5.11. Как убрать теги?……………………………………………………………………………………………………………… 252

Глава 6. Фреймворки PHP……………………………………………………………………. 254

6.1. Знакомство с Laravel………………………………………………………………………………………………………… 254

6.2. Быстрый старт…………………………………………………………………………………………………………………… 256

6.3. Уязвимость CSRF………………………………………………………………………………………………………………. 259

6.4. Базы данных……………………………………………………………………………………………………………………… 261

6.4.1. Добавление данных……………………………………………………………………………………………………. 263

6.4.2. Чтение данных…………………………………………………………………………………………………………….. 264

6.4.3. Флуд при добавлении данных…………………………………………………………………………………… 266

6.4.4. Работа с базами данных в Symfony………………………………………………………………………….. 266

6.5. Фреймворки и защита от XSS…………………………………………………………………………………………… 267

6.5.1. XSS в Symfony…………………………………………………………………………………………………………….. 269

Литература…………………………………………………………………………………………… 270

Описание файлового архива, сопровождающего книгу……………………….. 270

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

Фленов Михаил

Флёнов Михаил, профессиональный программист. Работал в журнале «Хакер», в котором несколько лет вел рубрики «Hack-FAQ» и «Кодинг» для программистов, печатался в журналах «Игромания» и «Chip-Россия». Автор бестселлеров «Библия Delphi», «Программирование в Delphi глазами хакера», «Программирование на C++ глазами хакера», «Компьютер глазами хакера» и др. Некоторые книги переведены на иностранные языки и изданы в США, Канаде, Польше и других странах.

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

Новинка: Расширенная аналитика с PySpark

Расширенная аналитика с PySpark

Представляем книгу, которая посвящена практическим методам анализа больших объемов данных с использованием языка Python и фреймворка Spark, она знакомит с моделью программирования Spark и основами системы с открытым исходным кодом  PySpark. Каждая глава описывает отдельный аспект анализа данных, показаны основы обработки данных в PySpark и Python на примере очистки данных, подробно освещается машинное обучение с помощью Spark. Книга поможет читателю понять, как устроен и работает весь конвейер PySpark для комплексной аналитики больших наборов данных: от создания и оценки моделей до очистки, предварительной обработки и исследования данных с особым акцентом на производственные приложения. Отдельные главы посвящены обработке изображений и библиотеке Spark NLP.

Практические примеры анализа больших наборов данных с использованием Python и Spark

В современном мире накоплен ошеломляющий объем данных, и он продолжает расти. Один из основных инструментов анализа данных — Apache Spark, фреймворк с открытым исходным кодом для распределенной обработки неструктурированных и слабоструктурированных данных. Это практическое руководство объединяет Spark, статистические методы и наборы данных из реального мира. Авторы научат вас решать задачи анализа с помощью  системы с открытым исходным кодом PySpark, применяемой для распределенной обработки больших данных с использованием Python, а также других передовых методов программирования Spark.

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

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

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

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

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

Почему мы написали эту книгу именно сейчас?. 9

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

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

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

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

ГЛАВА 1. Анализ больших данных. 15

Работа с большими данными. 16

Знакомство с Apache Spark и PySpark. 18

Компоненты Spark. 18

PySpark. 20

Экосистема. 21

Spark 3.0. 22

PySpark решает проблемы науки о данных. 23

Что дальше?. 24

ГЛАВА 2. Введение в анализ данных с помощью PySpark. 25

Архитектура Spark. 27

Установка PySpark. 28

Подготовка учебных данных. 30

Анализ данных с помощью API DataFrame. 36

Быстрая сводная статистика для фреймов данных. 40

Поворот и изменение формы фреймов данных. 42

Соединение фреймов данных и выбор признаков. 45

Функция оценивания и проверка модели. 46

Что дальше?. 48

ГЛАВА 3. Рекомендация музыки и набор данных Audioscrobbler. 49

Подготовка данных. 50

Наши требования к рекомендательной системе. 52

Альтернативный алгоритм наименьших квадратов. 55

Подготовка данных. 56

Создание первой модели. 59

Выборочная проверка рекомендаций. 63

Оценка качества рекомендаций. 65

Вычисление AUC.. 66

Выбор гиперпараметра. 68

Выдача рекомендаций. 70

Что дальше?. 72

ГЛАВА 4. Прогнозирование с помощью деревьев и лесов решений. 73

Деревья и леса решений. 74

Подготовка данных. 77

Наше первое дерево решений. 81

Гиперпараметры дерева решений. 88

Настройка деревьев решений. 90

Еще раз о категориальных признаках. 94

Случайные леса. 98

Получение прогнозов. 100

Что дальше?. 101

ГЛАВА 5. Обнаружение аномалий при помощи кластеризации
K-средних. 102

Кластеризация K-средних. 103

Выявление аномального сетевого трафика. 104

Набор данных Кубка KDD 1999 г. 105

Первый опыт кластеризации. 106

Выбор параметра k. 108

Визуализация с помощью SparkR.. 111

Нормализация признаков. 115

Категориальные переменные. 117

Использование меток с энтропией. 119

Кластеризация в действии. 120

Что дальше?. 122

ГЛАВА 6. Исследование Википедии с помощью LDA и Spark NLP. 123

Скрытое распределение Дирихле. 124

LDA в PySpark. 124

Получение данных. 125

Spark NLP. 126

Подготовка вашей среды.. 127

Парсинг данных. 128

Подготовка данных с использованием Spark NLP. 130

TF-IDF. 134

Вычисление TF-IDF. 135

Создание модели LDA.. 136

Что дальше?  139

ГЛАВА 7. Геопространственный и временнóй анализ данных
о поездках на такси. 140

Подготовка данных. 141

Преобразование строк даты и времени в метки времени. 143

Обработка недействительных записей. 146

Геопространственный анализ. 147

Введение в GeoJSON.. 147

GeoPandas. 149

Сессионизация в PySpark. 152

Создание сессий: вторичные сортировки в PySpark. 153

Что дальше?. 155

ГЛАВА 8. Оценка финансового риска. 157

Терминология. 158

Методы расчета VaR.. 159

Дисперсия-ковариация. 159

Ретроспективное моделирование. 159

Моделирование методом Монте-Карло. 159

Наша модель. 160

Получение данных. 161

Подготовка данных. 162

Определение весов факторов. 165

Выборка. 168

Многомерное нормальное распределение. 170

Испытание моделей. 171

Визуализация распределения доходов. 175

Что дальше?. 175

ГЛАВА 9. Анализ данных геномики и проект BDG.. 177

Разделение хранения и моделирования. 178

Установка ADAM.. 181

Введение в работу с геномными данными с использованием ADAM.. 182

Преобразование формата файла с помощью ADAM CLI 183

Получение геномных данных с помощью PySpark и ADAM.. 183

Прогнозирование сайтов связывания транскрипционных факторов на основе данных ENCODE  189

Что дальше?. 194

ГЛАВА 10. Обнаружение сходства изображений с помощью глубокого обучения и PySpark LSH   196

PyTorch. 197

Установка PyTorch. 197

Подготовка данных. 198

Изменение размера изображений с помощью PyTorch. 199

Модель глубокого обучения для векторного представления изображений. 200

Встраивание изображений. 200

Импорт встраиваний изображений в PySpark. 202

Поиск схожих изображений с использованием PySpark LSH.. 203

Поиск ближайшего соседа. 204

Что дальше?. 207

ГЛАВА 11. Управление жизненным циклом машинного обучения
с помощью MLflow.. 208

Жизненный цикл машинного обучения. 208

MLflow.. 210

Отслеживание экспериментов. 211

Использование MLflow Model 214

Создание и использование проектов MLflow.. 217

Что дальше?. 220

Об авторах. 221

Колофон. 222

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

Акаш Тандон — cоучредитель и технический директор компании Looppanel. Ранее работал главным инженером по данным в компании Atlan,  специализирующейся на обработке данных и аналитике.

Сэнди Райза — ведущий разработчик проекта Dagster, облачного оркестратора для анализа данных,  и участник проекта Apache Spark.

Ури Ласерсон — учредитель и технический директор компании Patch Biosciences, специализирующей в области геномики и расшифровки ДНК. Ранее работал с большими данными в Cloudera, создателе дистрибутивов Apache Hadoop.

Шон Оуэн — главный архитектор решений, специализирующийся на машинном обучении и науке о данных в Databricks, компании по разработке корпоративного программного обеспечения, основанной создателями Apache Spark. Участник проекта Apache Spark.

Джош Уиллс — инженер-программист в компании WeaveGrid, развивающей «зеленые» технологии в сфере энергетики, и бывший руководитель отдела обработки данных в компании Slack Tecnologies, разработавшей одноименный корпоративный мессенджер .

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

Погрузитесь в аналитику данных

Погружение в аналитику данных

В нашем издательстве вышла новая книга, в которой приводятся практические приемы анализа данных. Рассказано, как исследовать и тестировать взаимосвязи между переменными в Excel и использовать его для статистики и анализа. Описан перенос данных из Excel в R, язык программирования с открытым исходным кодом, специально разработанный для выполнения статистического анализа. Отдельный раздел посвящен переносу данных из Excel в Python и выполнению полного анализа данных средствами этого языка. В результате читатель научится выполнять разведочный анализ данных (Exploratory Data Analysis, EDA) и проверку гипотез с использованием языков программирования Python и R.

Аналитика данных может показаться сложной сферой, но если вы  опытный пользователь Excel, у вас есть уникальное преимущество. С помощью этого практического руководства пользователи Excel среднего уровня получат прочное понимание аналитики и стека данных. Прочитав эту книгу, вы сможете проводить исследовательский анализ данных и проверку гипотез с помощью языков программирования Python и R.

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

Эта практическая книга поможет вам:

Изучить основы аналитики в Excel.  Используйте Excel для проверки взаимосвязи между переменными, научитесь применять его возможности в статистике и аналитике.

Перейти от Excel к R.  Перенесите данные в R, язык программирования с открытым исходным кодом, специально разработанный для выполнения статистического анализа.

Перейти от Excel к Python.  Узнайте, как перенести информацию из Excel в Python, научитесь выполнять разведочный анализ, проверку гипотез, а также полный анализ данных средствами этого языка.

Джордж подробно рассказывает, что нужно сделать, чтобы перейти от Excel к науке о данных и аналитике.
Джордан Голдмайер, обладатель сертификата Microsoft Excel MVP

Эта книга – уникальное пособие, которое можно использовать и как справочник, и как учебник по бизнесу и аналитике данных.
Айден Джонсон, специалист по анализу данных и преподаватель

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

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

Цель обучения………………………………………………………………………………………………………………………………. 9

Предварительные условия………………………………………………………………………………………………………….. 9

Технические требования………………………………………………………………………………………………….. 9

Требования к предварительной подготовке…………………………………………………………………. 10

Как я пришел к аналитике…………………………………………………………………………………………………………. 10

«Excel — плохо, программирование — хорошо»……………………………………………………………………. 11

Преимущества Excel при обучении аналитике……………………………………………………………………….. 12

Обзор книги………………………………………………………………………………………………………………………………… 13

Упражнения в конце глав………………………………………………………………………………………………………….. 13

Эта книга — не список готовых решений………………………………………………………………………………… 14

Без паники!…………………………………………………………………………………………………………………………………. 14

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

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

Контакты…………………………………………………………………………………………………………………………………….. 16

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

Часть I. Основы аналитики в Excel………………………………………… 17

Глава 1. Основы разведочного анализа данных…………………………………….. 19

Что такое разведочный анализ данных?…………………………………………………………………………………. 19

Наблюдения……………………………………………………………………………………………………………………. 21

Переменные…………………………………………………………………………………………………………………….. 21

Категориальные переменные………………………………………………………………………………… 22

Количественные переменные………………………………………………………………………………… 24

Закрепление материала: классификация переменных…………………………………………………………… 25

Резюме: типы переменных………………………………………………………………………………………………………… 27

Исследование переменных в Excel…………………………………………………………………………………………… 27

Исследование категориальных переменных……………………………………………………………….. 27

Исследование количественных переменных……………………………………………………………….. 30

Заключение………………………………………………………………………………………………………………………………… 41

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

Глава 2. Понятие вероятности……………………………………………………………….. 42

Вероятность и случайность………………………………………………………………………………………………………. 42

Вероятность и выборочное пространство………………………………………………………………………………. 42

Вероятность и эксперименты……………………………………………………………………………………………………. 43

Безусловная и условная вероятность………………………………………………………………………………………. 43

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

Дискретное распределение вероятностей……………………………………………………………………. 44

Непрерывное распределение вероятностей…………………………………………………………………. 47

Заключение………………………………………………………………………………………………………………………………… 55

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

Глава 3. Основы инференциальной статистики…………………………………….. 56

Базовые понятия статистического вывода………………………………………………………………………………. 56

Сбор данных для репрезентативной выборки……………………………………………………………… 57

Формулирование гипотез………………………………………………………………………………………………. 58

Разработка плана анализа…………………………………………………………………………………………….. 59

Анализ данных……………………………………………………………………………………………………………….. 62

Принятие решения………………………………………………………………………………………………………….. 64

Это ваш мир… данные только живут в нем……………………………………………………………………………… 71

Заключение………………………………………………………………………………………………………………………………… 72

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

Глава 4. Корреляция и регрессия……………………………………………………………. 74

«Корреляция не подразумевает причинно-следственную связь»………………………………………….. 74

Понятие корреляции………………………………………………………………………………………………………………….. 75

От корреляции к регрессии…………………………………………………………………………………………….. 80

Линейная регрессия в Excel……………………………………………………………………………………………. 81

Переосмысление результатов: ложные зависимости……………………………………………………………… 87

Заключение………………………………………………………………………………………………………………………………… 88

Переход к программированию…………………………………………………………………………………………………. 89

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

Глава 5. Стек анализа данных……………………………………………………………….. 90

Статистика, аналитика и наука о данных………………………………………………………………………………. 90

Статистика………………………………………………………………………………………………………………………. 90

Аналитика данных…………………………………………………………………………………………………………. 90

Бизнес-аналитика…………………………………………………………………………………………………………… 91

Наука о данных………………………………………………………………………………………………………………. 91

Машинное обучение………………………………………………………………………………………………………. 91

Различия без взаимоисключения…………………………………………………………………………………… 92

Значение стека анализа данных………………………………………………………………………………………………. 92

Электронные таблицы……………………………………………………………………………………………………. 93

VBA………………………………………………………………………………………………………………………….. 94

Современный Excel………………………………………………………………………………………………… 95

Базы данных……………………………………………………………………………………………………………………. 96

Платформы бизнес-аналитики (BI)……………………………………………………………………………….. 97

Языки программирования для анализа данных………………………………………………………….. 98

Заключение………………………………………………………………………………………………………………………………… 99

Что будет дальше…………………………………………………………………………………………………………………….. 100

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

Часть II. От Excel к R……………………………………………………………………. 101

Глава 6. Первые шаги в R для пользователей Excel……………………………… 103

Загрузка R………………………………………………………………………………………………………………………………… 103

Начало работы с RStudio……………………………………………………………………………………………………….. 103

Пакеты в R………………………………………………………………………………………………………………………………… 112

Обновление R, RStudio и пакетов R……………………………………………………………………………………….. 114

Заключение………………………………………………………………………………………………………………………………. 114

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

Глава 7. Структуры данных в R…………………………………………………………… 117

Векторы…………………………………………………………………………………………………………………………………….. 117

Индексирование и подмножества векторов…………………………………………………………………………… 119

От таблиц Excel к кадрам данных R………………………………………………………………………………………. 120

Импорт данных в R………………………………………………………………………………………………………………….. 122

Исследование кадра данных………………………………………………………………………………………………….. 126

Индексирование и подмножества кадров данных………………………………………………………………… 128

Запись кадров данных…………………………………………………………………………………………………………….. 129

Заключение………………………………………………………………………………………………………………………………. 130

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

Глава 8. Обработка и визуализация данных в R………………………………….. 131

Обработка данных с помощью пакета dplyr…………………………………………………………………………. 131

Постолбцовые операции……………………………………………………………………………………………… 132

Построчные операции………………………………………………………………………………………………….. 135

Агрегирование и объединение данных………………………………………………………………………. 137

dplyr и оператор pipe (%>%)……………………………………………………………………………………….. 141

Преобразование данных с помощью tidyr…………………………………………………………………. 142

Визуализация данных с помощью ggplot2……………………………………………………………………………. 145

Заключение………………………………………………………………………………………………………………………………. 151

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

Глава 9. Кульминация: R для анализа данных…………………………………….. 152

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

Проверка гипотез……………………………………………………………………………………………………………………… 157

t-тест для независимых выборок…………………………………………………………………………………. 157

Линейная регрессия……………………………………………………………………………………………………… 159

Разделение и проверка данных для обучения и тестирования………………………………… 161

Заключение………………………………………………………………………………………………………………………………. 164

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

Часть III. От Excel к Python………………………………………………………. 165

Глава 10. Первые шаги в Python для пользователей Excel……………………. 167

Загрузка Python……………………………………………………………………………………………………………………….. 167

Начало работы с Jupyter…………………………………………………………………………………………………………. 168

Модули в Python………………………………………………………………………………………………………………………. 176

Обновление Python, Anaconda и пакетов Python………………………………………………………. 178

Заключение………………………………………………………………………………………………………………………………. 178

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

Глава 11. Структуры данных в Python…………………………………………………. 180

Массивы NumPy……………………………………………………………………………………………………………………….. 181

Индексирование и подмножества массивов NumPy……………………………………………………………… 182

Кадры данных Pandas…………………………………………………………………………………………………………….. 184

Импорт данных в Python…………………………………………………………………………………………………………. 185

Исследование кадра данных………………………………………………………………………………………………….. 187

Индексирование и подмножества кадров данных…………………………………………………….. 188

Запись кадров данных…………………………………………………………………………………………………. 189

Заключение………………………………………………………………………………………………………………………………. 189

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

Глава 12. Обработка и визуализация данных в Python…………………………. 191

Постолбцовые операции…………………………………………………………………………………………………………. 192

Построчные операции…………………………………………………………………………………………………………….. 194

Агрегирование и объединение данных………………………………………………………………………………….. 195

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

Визуализация данных……………………………………………………………………………………………………………… 199

Заключение………………………………………………………………………………………………………………………………. 203

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

Глава 13. Кульминация: Python для анализа данных…………………………… 204

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

Проверка гипотез……………………………………………………………………………………………………………………… 207

t-тест для независимых выборок…………………………………………………………………………………. 207

Линейная регрессия……………………………………………………………………………………………………… 208

Разделение и проверка данных для обучения и тестирования………………………………… 210

Заключение………………………………………………………………………………………………………………………………. 212

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

Глава 14. Заключение и дальнейшие шаги…………………………………………… 213

Дополнительные элементы стека анализа данных………………………………………………………………. 213

План исследований и бизнес-эксперименты…………………………………………………………………………. 213

Дополнительные статистические методы……………………………………………………………………………… 214

Наука о данных и машинное обучение…………………………………………………………………………………. 214

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

Этика…………………………………………………………………………………………………………………………………………. 215

Двигайтесь вперед и выбирайте то, что нравится………………………………………………………………… 215

Напутствие……………………………………………………………………………………………………………………………….. 216

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

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

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

Джордж Маунт

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

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

Новинка: Docker без секретов

Docker без секретов

Книга подробно рассказывает о развертывании и поддержке контейнерных приложений с использованием технологии Docker. Описан принцип работы образов, контейнеров и связанных с ними хранилищ Docker Storage, рассмотрена система контейнеризации Docker Swarm, показаны принципы сетевого взаимодействия Container Network Model. Раскрыты вопросы использования плагинов в сервисах Docker, рассмотрено развертывание служб в Swarm. Отдельная глава посвящена обеспечению безопасности в экосистеме Docker, масштабированию и поддержке контейнерных приложений.

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

Создавайте надежные и безопасные приложения с использованием технологии Docker

В книге описаны:

  • Основы работы с контейнерами и экосистемой Docker
  • Использование образов Docker
  • Работа с хранилищами Docker Storage
  • Использование плагинов в сервисах Docker
  • Развертывание служб в Swarm
  • Cетевые возможности Docker
  • Безопасность приложений в экосистеме Docker
  • Масштабирование и поддержка контейнерных приложений

Книга знакомит читателя с технологией контейнеризации и рассказывает о том, чем контейнеры отличаются от виртуальных машин и почему они являются предпочтительным инструментом для разработки приложений. Вы изучите принцип работы образов, контейнеров и связанных с ними хранилищ, познакомитесь с механизмом оркестрации Docker Swarm, освоите принципы сетевого взаимодействия Container Network Model. Узнаете, как защитить свои приложения с использованием встроенных возможностей Docker.

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

Об авторе……………………………………………………………………………………………….. 11

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

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

Глава 1. Контейнеризация и Docker……………………………………………………….. 17

Введение……………………………………………………………………………………………………………………………………… 17

Жизнь до контейнеризации……………………………………………………………………………………………………….. 18

Концепция контейнеризации…………………………………………………………………………………………………….. 18

Преимущества контейнеризации……………………………………………………………………………………………… 19

Docker………………………………………………………………………………………………………………………………………….. 21

Docker Engine……………………………………………………………………………………………………………………………… 21

Компоненты Docker Engine……………………………………………………………………………………………….. 22

Docker Hub и Docker Registry…………………………………………………………………………………………………….. 23

Контейнеры Linux и Windows…………………………………………………………………………………………………… 24

Контейнеры и Windows……………………………………………………………………………………………………… 24

Микросервисы и контейнеризация…………………………………………………………………………………………… 24

Безопасность в Docker……………………………………………………………………………………………………………….. 25

Заключение………………………………………………………………………………………………………………………………… 27

Основные тезисы………………………………………………………………………………………………………………………… 27

Контрольный тест……………………………………………………………………………………………………………………… 28

Ответы…………………………………………………………………………………………………………………………………. 28

Вопросы……………………………………………………………………………………………………………………………………… 29

Ключевые термины……………………………………………………………………………………………………………………. 29

Глава 2. Контейнеры и образы………………………………………………………………. 31

Контейнеры: общая характеристика……………………………………………………………………………………….. 31

Запуск контейнера…………………………………………………………………………………………………………………….. 32

Состояния контейнеров Docker………………………………………………………………………………………………… 34

Процессы внутри контейнера…………………………………………………………………………………………………… 36

Исследование контейнера и получение информации…………………………………………………………….. 38

Журналы контейнеров………………………………………………………………………………………………………………. 39

Базовая архитектура контейнера…………………………………………………………………………………………….. 43

Образы: общая характеристика……………………………………………………………………………………………….. 44

Образы: детальное изучение…………………………………………………………………………………………………….. 45

Копирование при записи…………………………………………………………………………………………………… 47

Где хранятся образы?………………………………………………………………………………………………………… 48

Исследование образа и получение информации…………………………………………………………….. 49

Сохранение образа……………………………………………………………………………………………………………. 49

Сохранение образа с помощью команды COMMIT……………………………………………………….. 50

Dockerfile…………………………………………………………………………………………………………………………………….. 52

Кеш сборки…………………………………………………………………………………………………………………………………. 53

Многоступенчатые сборки……………………………………………………………………………………………………….. 54

Заключение………………………………………………………………………………………………………………………………… 59

Основные тезисы………………………………………………………………………………………………………………………… 59

Контрольный тест……………………………………………………………………………………………………………………… 60

Ответы…………………………………………………………………………………………………………………………………. 62

Вопросы……………………………………………………………………………………………………………………………………… 62

Ключевые термины……………………………………………………………………………………………………………………. 62

Глава 3. Драйверы хранилища и тома……………………………………………………. 63

Драйверы хранилища Docker…………………………………………………………………………………………………… 63

Поддерживаемые драйверы хранилища………………………………………………………………………….. 64

Поддержка backing filesystem……………………………………………………………………………………………………. 64

Драйверы хранилища overlay и overlay2………………………………………………………………………………… 65

Характеристика и принцип работы драйвера хранилища overlay2……………………………… 66

Тома Docker………………………………………………………………………………………………………………………………… 68

Заключение………………………………………………………………………………………………………………………………… 76

Основные тезисы………………………………………………………………………………………………………………………… 76

Контрольный тест……………………………………………………………………………………………………………………… 77

Ответы…………………………………………………………………………………………………………………………………. 78

Вопросы……………………………………………………………………………………………………………………………………… 79

Ключевые термины……………………………………………………………………………………………………………………. 79

Глава 4. Модель Container Network и сетевой мост Docker………………………. 81

Модель Container Network………………………………………………………………………………………………………… 81

Интерфейcы драйвера CNM……………………………………………………………………………………………………… 82

Libnetwork…………………………………………………………………………………………………………………………………… 83

Драйверы Docker……………………………………………………………………………………………………………………….. 83

Сетевой мост Docker………………………………………………………………………………………………………………….. 84

Концепция пространства имен Linux……………………………………………………………………………….. 84

Мост Docker………………………………………………………………………………………………………………………… 89

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

Основные тезисы………………………………………………………………………………………………………………………… 90

Контрольный тест……………………………………………………………………………………………………………………… 90

Ответы…………………………………………………………………………………………………………………………………. 91

Вопросы……………………………………………………………………………………………………………………………………… 91

Ключевые термины……………………………………………………………………………………………………………………. 92

Глава 5. Docker Swarm…………………………………………………………………………… 93

Введение……………………………………………………………………………………………………………………………………… 93

Что такое Docker Swarm……………………………………………………………………………………………………………. 93

Преимущества Docker Swarm……………………………………………………………………………………………………. 94

Создание и настройка кластера Swarm…………………………………………………………………………………… 95

Консенсус в Docker Swarm………………………………………………………………………………………………… 98

Концепция сервиса в Swarm……………………………………………………………………………………………………… 99

Создание реплик………………………………………………………………………………………………………………. 100

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

Реплицированные и глобальные сервисы……………………………………………………………………… 103

Очистка кластера Swarm………………………………………………………………………………………………………… 104

Блокировка и разблокировка кластера Swarm……………………………………………………………………… 106

Сети в Docker Swarm……………………………………………………………………………………………………………….. 109

Создание сервиса с опубликованным портом………………………………………………………………. 113

Обход маршрутизирующей mesh-сети в Swarm…………………………………………………………….. 114

Шифрование трафика в оверлейной сети………………………………………………………………………. 115

Устранение неполадок в Docker Swarm…………………………………………………………………………………. 115

Заключение………………………………………………………………………………………………………………………………. 115

Основные тезисы……………………………………………………………………………………………………………………… 116

Контрольный тест……………………………………………………………………………………………………………………. 116

Ответы……………………………………………………………………………………………………………………………….. 117

Вопросы……………………………………………………………………………………………………………………………………. 118

Ключевые термины………………………………………………………………………………………………………………….. 118

Глава 6. Сети Docker……………………………………………………………………………. 119

Введение…………………………………………………………………………………………………………………………………… 119

Сети в Docker……………………………………………………………………………………………………………………………. 119

Сеть Bridge………………………………………………………………………………………………………………………………… 120

Сеть Host…………………………………………………………………………………………………………………………………… 126

Сеть None………………………………………………………………………………………………………………………………….. 126

Использование пространства имен существующего контейнера……………………………………….. 127

Сопоставление портов…………………………………………………………………………………………………………….. 128

Сеть MACVLAN……………………………………………………………………………………………………………………….. 130

MACVLAN в режиме bridge…………………………………………………………………………………………….. 131

MACVLAN в режиме Trunk Bridge 802.1Q…………………………………………………………………….. 136

Сеть Overlay……………………………………………………………………………………………………………………………… 138

Основные тезисы……………………………………………………………………………………………………………………… 153

Контрольный тест……………………………………………………………………………………………………………………. 153

Ответы……………………………………………………………………………………………………………………………….. 155

Вопросы……………………………………………………………………………………………………………………………………. 155

Ключевые термины………………………………………………………………………………………………………………….. 156

Глава 7. Безопасность в Docker. Часть 1………………………………………………. 157

Введение…………………………………………………………………………………………………………………………………… 157

Пространства имен ядра…………………………………………………………………………………………………………. 157

Контрольные группы………………………………………………………………………………………………………………. 163

Память……………………………………………………………………………………………………………………………….. 164

Центральный процессор………………………………………………………………………………………………….. 166

Capabilities……………………………………………………………………………………………………………………………….. 167

Обязательный контроль доступа……………………………………………………………………………………………. 170

Docker и AppArmor……………………………………………………………………………………………………………. 176

Docker и SELinux………………………………………………………………………………………………………………. 181

Seccomp…………………………………………………………………………………………………………………………………….. 185

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

Основные тезисы……………………………………………………………………………………………………………………… 186

Контрольный тест……………………………………………………………………………………………………………………. 187

Ответы……………………………………………………………………………………………………………………………….. 188

Вопросы……………………………………………………………………………………………………………………………………. 188

Ключевые термины………………………………………………………………………………………………………………….. 189

Глава 8. Безопасность в Docker. Часть 2………………………………………………. 191

Введение…………………………………………………………………………………………………………………………………… 191

Docker Enterprise Edition………………………………………………………………………………………………………….. 191

Установка Docker Enterprise Edition……………………………………………………………………………………….. 192

Установка Universal Control Plane…………………………………………………………………………………… 196

Установка Docker Trusted Registry………………………………………………………………………………….. 199

Загрузка и установка клиентского пакета…………………………………………………………………….. 200

Функции безопасности Docker Enterprise Edition………………………………………………………………….. 203

Управление доступом на основе ролей…………………………………………………………………………………. 208

Заключение………………………………………………………………………………………………………………………………. 215

Основные тезисы……………………………………………………………………………………………………………………… 215

Контрольный тест……………………………………………………………………………………………………………………. 216

Ответы……………………………………………………………………………………………………………………………….. 218

Вопросы……………………………………………………………………………………………………………………………………. 218

Ключевые термины………………………………………………………………………………………………………………….. 218

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

 

 

Сайбал Гош — главный программный архитектор в компании Ericsson India Ltd с более чем двадцатилетним опытом в сфере IT-инфраструктуры и безопасности, консалтинга и разработки ПО. За свою карьеру он успел примерить на себя разные роли, включая администратора баз данных, технического консультанта, технического писателя, разработчика приложений и преподавателя.

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

Переходите с Java на Kotlin!

От Java к Kotlin

Расстояние от острова Ява до острова Котлин составляет 9892 километра по прямой. Чтобы преодолеть его, не пользуясь воздушным транспортом, понадобится как минимум неделя. Если вы — опытный Java-разработчик, который решил перейти на Kotlin, вам потребуется примерно столько же времени. Вы обнаружите, что в Kotlin все делается по-другому, он требует иных подходов к программированию. Этот язык более функционален, у него больше возможностей, поэтому перенос кода ваших проектов с Java на Kotlin — отличная идея.

Ваши гиды Дункан и Нэт уже проделали этот путь в 2015 году, и с тех пор помогли многим командам и отдельным разработчикам повторить его. Путешествуйте вместе с ними по проверенному маршруту, включающему такие промежуточные остановки, как переход от объектов JavaBeans к значениям, от коллекций Java к коллекциям Kotlin и от классов Java к классам Kotlin.

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

Книга описывает практические приемы рефакторинга и переноса кода написанных на Java мобильных приложений для Android  на язык Kotlin с сохранением совместимости. Приведено подробное сравнение этих двух языков, даны примеры перевода проектов с Java на Kotlin, добавления поддержки Kotlin в сборку Java. Показан переход от классов Java к классам Kotlin, от коллекций Java к коллекциям Kotlin, от объектов JavaBeans к значениям, от статических методов к функциям верхнего уровня. Подробно рассматривается обработка ошибок, приведены практические приемы управления проектами со смешанной кодовой базой. Даны советы по рефакторингу кода и функциональному программированию на Kotlin.

Взять знакомый всем старый добрый код Java и наблюдать за тем, как он постепенно превращается в лаконичный, четкий, выразительный и легкий в обслуживании код на языке Kotlin — замечательный способ выучить язык. Воспользуйтесь опытом, которым делятся Макгрегор и Прайс.
Венкат Субраманиам, Ph.D., писатель и основатель компании Agile Developer, Inc.

Самый быстрый способ перенести свои навыки и умения из Java в Kotlin. Обязательно к прочтению любому профессиональному разработчику на Java.
Дон и Дэвид Гриффитс, авторы книг «React. Сборник рецептов» и «Head First. Kotlin»

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

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

Как устроена эта книга?……………………………………………………………………………………………………………. 12

Как были выбраны темы?…………………………………………………………………………………………………………. 12

Уровень сложности……………………………………………………………………………………………………………………. 13

Идеальный код…………………………………………………………………………………………………………………………… 14

Форматирование кода……………………………………………………………………………………………………………….. 14

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

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

Платформа онлайн-обучения O’Reilly……………………………………………………………………………………… 17

Как с нами связаться?………………………………………………………………………………………………………………… 17

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

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

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

Глава 1. Введение…………………………………………………………………………………… 21

Сущность языка программирования………………………………………………………………………………………… 21

История стилей программирования на Java (на наш взгляд)………………………………………………… 24

Первобытный стиль………………………………………………………………………………………………………… 24

Стиль JavaBeans…………………………………………………………………………………………………………….. 25

Корпоративный стиль……………………………………………………………………………………………………. 26

Инверсия абстракции………………………………………………………………………………………………. 27

Современный стиль………………………………………………………………………………………………………… 29

Будущее…………………………………………………………………………………………………………………………… 29

Сущность Kotlin…………………………………………………………………………………………………………………………. 29

Рефракторинг на Kotlin……………………………………………………………………………………………………………… 31

Принципы рефакторинга……………………………………………………………………………………………….. 32

Подразумеваем хорошее покрытие тестами………………………………………………………………… 33

Фиксации изменений рассчитаны на Git Bisect……………………………………………………………. 33

Над чем мы работаем?………………………………………………………………………………………………………………. 34

Приступим!…………………………………………………………………………………………………………………………………. 34

Глава 2. Перевод проектов с Java на Kotlin……………………………………………. 35

Стратегия……………………………………………………………………………………………………………………………………. 35

Добавление поддержки Kotlin в сборку Java…………………………………………………………………………… 37

Другие системы сборки……………………………………………………………………………………………. 40

Двигаемся дальше……………………………………………………………………………………………………………………… 40

Глава 3. От классов Java к классам Kotlin……………………………………………… 41

Исходный код…………………………………………………………………………………………………………… 41

Простой тип значений……………………………………………………………………………………………………………….. 41

Ограничения классов данных…………………………………………………………………………………………………… 48

Двигаемся дальше……………………………………………………………………………………………………………………… 52

Глава 4. От необязательных типов к обнуляемым…………………………………. 54

Как представить отсутствие чего-либо?………………………………………………………………………………….. 54

Рефракторинг от необязательных типов к обнуляемым…………………………………………………………. 56

Итерация и цикл for……………………………………………………………………………………………………. 58

Рефракторинг с помощью Expand-and-Contract……………………………………………………… 64

Рефракторинг в код, характерный для Kotlin………………………………………………………………………….. 64

Двигаемся дальше……………………………………………………………………………………………………………………… 71

Глава 5. От объектов JavaBeans к значениям…………………………………………. 72

JavaBeans……………………………………………………………………………………………………………………………………. 72

Значения……………………………………………………………………………………………………………………………………… 73

Почему следует выбирать значения?………………………………………………………………………………………. 74

Рефакторинг экземпляров JavaBeans в значения……………………………………………………………………. 74

Равенство объектов…………………………………………………………………………………………………. 81

Двигаемся дальше……………………………………………………………………………………………………………………… 82

Глава 6. От коллекций Java к коллекциям Kotlin………………………………….. 83

Коллекции Java………………………………………………………………………………………………………………………….. 83

Не изменяйте разделяемые коллекции……………………………………………………………………. 86

Коллекции Kotlin………………………………………………………………………………………………………………………… 86

Рефакторинг от коллекций Java к коллекциям Kotlin……………………………………………………………… 89

Подправим код на Java………………………………………………………………………………………………….. 90

Преобразование в Kotlin………………………………………………………………………………………………… 95

Двигаемся дальше……………………………………………………………………………………………………………………… 99

Глава 7. От действий к вычислениям…………………………………………………… 100

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

Вычисления………………………………………………………………………………………………………………………………. 101

Вычисляемое свойство или функция?………………………………………………………………….. 102

Действия……………………………………………………………………………………………………………………………………. 102

Почему это должно нас волновать?………………………………………………………………………………………. 103

Процедурное программирование…………………………………………………………………………. 104

Почему предпочтение отдается вычислениям?…………………………………………………………………….. 104

Рефракторинг действий в вычисления……………………………………………………………………………………. 105

Существующий код………………………………………………………………………………………………………. 105

2015 был концом времени……………………………………………………………………………………… 109

Улучшенный проект…………………………………………………………………………………………………….. 109

Конец игры……………………………………………………………………………………………………………………. 115

Двигаемся дальше……………………………………………………………………………………………………………………. 118

Глава 8. От статических методов к функциям верхнего уровня……………. 119

Модификатор Static в Java……………………………………………………………………………………………………… 119

Статическое состояние………………………………………………………………………………………….. 119

Функции верхнего уровня в Kotlin, объекты и объекты-компаньоны………………………………….. 120

Рефракторинг от статических методов к функциям верхнего уровня…………………………………. 122

Удобные функции………………………………………………………………………………………………….. 123

Перемещение на верхний уровень………………………………………………………………………………………….. 126

Kotlin’изация……………………………………………………………………………………………………………………………… 127

Перемещение функций верхнего уровня………………………………………………………………. 129

Двигаемся дальше……………………………………………………………………………………………………………………. 129

Глава 9. От многострочных функций к однострочным………………………… 130

Попытка № 1: Замена встроенным выражением…………………………………………………………………… 132

Попытка № 2: Ввести функцию………………………………………………………………………………………………. 133

Попытка № 3: Блок Let…………………………………………………………………………………………………………….. 138

Попытка № 4: Отступление…………………………………………………………………………………………………….. 140

Что должен возвращать метод Parse?……………………………………………………………………….. 143

Двигаемся дальше……………………………………………………………………………………………………………………. 143

Глава 10. От функций к функциям-расширениям………………………………… 145

Функции и методы……………………………………………………………………………………………………………………. 145

Функции-расширения………………………………………………………………………………………………………………. 147

Расширения и типы функций…………………………………………………………………………………………………… 148

Свойства-расширения……………………………………………………………………………………………………………… 149

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

Как именовать преобразования?…………………………………………………………………………… 150

Обнуляемые параметры………………………………………………………………………………………………………….. 151

Обнуляемые получатели…………………………………………………………………………………………………………. 152

Обобщенные расширения……………………………………………………………………………………………………….. 154

Функции-расширения в качестве методов…………………………………………………………………………….. 155

Рефракторинг к функциям-расширениям……………………………………………………………………………….. 155

Двигаемся дальше……………………………………………………………………………………………………………………. 171

Глава 11. От методов к свойствам………………………………………………………… 172

Поля, акцессоры и свойства……………………………………………………………………………………………………. 172

Как выбрать?……………………………………………………………………………………………………………………………. 176

Мутирующие свойства……………………………………………………………………………………………………………. 178

Рефракторинг к свойствам………………………………………………………………………………………………………. 178

Двигаемся дальше……………………………………………………………………………………………………………………. 184

Глава 12. От функций к операторам…………………………………………………….. 185

Базовый класс: Money……………………………………………………………………………………………………………… 185

Добавление определяемого пользователем оператора……………………………………………………….. 187

Вызов нашего оператора из существующего кода Kotlin……………………………………………………. 189

Операторы для существующих классов Java……………………………………………………………………….. 191

Соглашения для аннотаций значений……………………………………………………………………………………. 191

Двигаемся дальше……………………………………………………………………………………………………………………. 195

Глава 13. От потоков к итерируемым объектам и последовательностям. 196

Потоки в Java……………………………………………………………………………………………………………………………. 196

Итераторы в Kotlin…………………………………………………………………………………………………………………… 198

Последовательности в Kotlin………………………………………………………………………………………………….. 199

Замена итераций и последовательностей……………………………………………………………. 199

Множественные итерации………………………………………………………………………………………………………. 200

Выбор между потоками, итераторами и последовательностями……………………………………….. 203

Алгебраическая трансформация……………………………………………………………………………………………. 204

Рефракторинг от потоков к итераторам и последовательностям……………………………………….. 207

Сначала итераторы……………………………………………………………………………………………………… 210

Последовательности…………………………………………………………………………………………………….. 214

Извлечение части конвейера……………………………………………………………………………………….. 218

Итоговая уборка…………………………………………………………………………………………………………… 220

Двигаемся дальше……………………………………………………………………………………………………………………. 221

Глава 14. От накопления объектов к преобразованиям……………………….. 222

Вычисление с использованием параметров накопления……………………………………………………… 222

Рефакторинг функций над немутирующими данными…………………………………………………………. 227

Давайте проделаем это снова………………………………………………………………………………………………… 233

Обогащение обнаруженной нами абстракции……………………………………………………………………… 237

По поводу имен……………………………………………………………………………………………………… 238

Двигаемся дальше……………………………………………………………………………………………………………………. 239

Глава 15. От инкапсулированных коллекций к псевдонимам типов……. 241

Защитные копии…………………………………………………………………………………………………….. 242

Создание коллекций доменов…………………………………………………………………………………………………. 243

Коллекции с другими свойствами………………………………………………………………………………………….. 244

Рефракторинг инкапсулированных коллекций…………………………………………………………………….. 245

Преобразование операций в расширения………………………………………………………………….. 246

Замена псевдонима типа……………………………………………………………………………………………… 248

Рефракторинг коллекций с другими свойствами……………………………………………………….. 254

Двигаемся дальше……………………………………………………………………………………………………………………. 257

Глава 16. От интерфейсов к функциям…………………………………………………. 259

Объектно-ориентированная инкапсуляция…………………………………………………………………………… 260

Функциональная инкапсуляция……………………………………………………………………………………………… 263

Функциональные типы в Java…………………………………………………………………………………………………. 266

Сочетание и совмещение………………………………………………………………………………………………………… 269

Выразительные типы функций………………………………………………………………………………. 271

Сравнение подходов……………………………………………………………………………………………………………….. 272

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

Объектно-ориентированный или функциональный?……………………………………………………………. 276

Наследие Java………………………………………………………………………………………………………………………….. 279

Прослеживаемость…………………………………………………………………………………………………………………… 280

Рефракторинг от интерфейсов к функциям……………………………………………………………………………. 280

Введение функций………………………………………………………………………………………………………… 284

Двигаемся дальше……………………………………………………………………………………………………………………. 288

Глава 17. От мокинга к маппингу………………………………………………………… 289

Повреждение теста, вызванное моком…………………………………………………………………… 290

Замена мокинга маппингом…………………………………………………………………………………………………….. 292

Но действительно ли мы хотим уйти от моков?……………………………………………………………………. 297

Двигаемся дальше……………………………………………………………………………………………………………………. 301

Глава 18. От открытых классов к запечатанным…………………………………. 302

Полиморфизм или запечатанные классы?…………………………………………………………………………….. 306

Преобразование интерфейса в запечатанный класс……………………………………………………………. 307

Двигаемся дальше……………………………………………………………………………………………………………………. 315

Глава 19. От проверяемых исключений к типам результатов………………. 316

Перезагрузка интернет-соединения………………………………………………………………………. 316

Обработка ошибок до появления методов, основанных на исключениях…………………………. 318

Обработка ошибок с исключениями………………………………………………………………………………………. 319

Java и проверяемые исключения……………………………………………………………………………………………. 320

Как должен быть оформлен сбой parseInt?………………………………………………………………… 321

Kotlin и исключения…………………………………………………………………………………………………………………. 322

За пределами исключений: функциональная обработка ошибок………………………………………. 322

Обработка ошибок в Kotlin……………………………………………………………………………………………………… 326

Рефракторинг от исключений к обработке ошибок……………………………………………………………… 327

HTTP……………………………………………………………………………………………………………………….. 328

Наша стратегия преобразования………………………………………………………………………………… 329

Начнем с самого низа…………………………………………………………………………………………………… 330

Именование……………………………………………………………………………………………………………. 331

Контракт……………………………………………………………………………………………………………………….. 335

Отступление………………………………………………………………………………………………………………….. 339

Еще исправления……………………………………………………………………………………………………………………… 343

Слои………………………………………………………………………………………………………………………………………….. 349

Двигаемся дальше……………………………………………………………………………………………………………………. 351

Глава 20. От выполнения ввода/вывода к передаче данных………………… 353

Прослушивание тестов……………………………………………………………………………………………………………. 353

Ввод/вывод данных…………………………………………………………………………………………………………………. 356

Рефакторинг для удобства чтения…………………………………………………………………………. 361

Эффективное написание………………………………………………………………………………………………………….. 361

Еще о стимулах к работе……………………………………………………………………………………….. 361

Эффективное считывание……………………………………………………………………………………………………….. 365

Двигаемся дальше……………………………………………………………………………………………………………………. 370

Глава 21. От исключений к значениям…………………………………………………. 371

Определение того, что может пойти не так…………………………………………………………………………… 371

Представление ошибок……………………………………………………………………………………………………………. 379

А как насчет ввода/вывода?……………………………………………………………………………………………………. 387

Двигаемся дальше……………………………………………………………………………………………………………………. 388

Глава 22. От классов к функциям………………………………………………………… 389

Приемочный тест……………………………………………………………………………………………………………………… 389

Модульное тестирование……………………………………………………………………………………………………….. 394

Заголовки………………………………………………………………………………………………………………………………….. 399

Различные разделители полей……………………………………………………………………………………………….. 408

Последовательности……………………………………………………………………………………………………………….. 415

Считывание из файла………………………………………………………………………………………………………………. 421

Сравнение с Commons CSV……………………………………………………………………………………………………. 426

Двигаемся дальше……………………………………………………………………………………………………………………. 432

Глава 23. Продолжение путешествия……………………………………………………. 433

О сущностях……………………………………………………………………………………………………………………………… 433

Функциональное мышление……………………………………………………………………………………………………. 434

Простая конструкция………………………………………………………………………………………………………………. 436

Функциональное программирование и текстуальные рассуждения………………………………….. 437

Рефакторинг……………………………………………………………………………………………………………………………… 438

Рефакторинг и функциональное мышление…………………………………………………………………………… 439

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

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

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

Дункан Макгрегор
Нэт Прайс

Дункан Макгрегор (Duncan McGregor) и Нэт Прайс (Nat Pryce) — опытные разработчики, консультанты и преподаватели. Ранние последователи как Java, так и Kotlin, они научились сочетать методы объектно-ориентированного и функционального программирования, а  также рефакторинга между этими языками. Их успешные семинары на KotlinConf доказали ценность обучения через рефакторинг и привели к написанию этой книги.

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

Научитесь создавать приложения для Android с нуля!

Разработка Android-приложений с нуля

Вышла книга “Разработка Android-приложений с нуля. 3 изд.”, которая научит вас разрабатывать профессиональные, полнофункциональные приложения для Android, даже если раньше вы никогда не программировали!

Доступно изложены основы программирования на Java для Android, включая объектно-ориентированное программирование. Описаны установка и настройка среды разработки Android Studio, создание функциональных пользовательских интерфейсов с помощью визуального редактора Android Studio. Раскрыты принципы материального дизайна. Рассмотрены компоновки CardView и ScrollView, обработка касаний экрана, захват данных, использование в приложении звука и анимации, поддержка различных версий Android и нескольких языков интерфейса. Затронута тема хранения данных во встроенной базе данных SQLite. Показаны паттерны проектирования, используемые профессионалами для создания современных мобильных приложений.

Вы хотите сделать карьеру в программировании, но не знаете с чего начать? У вас есть отличная идея для мобильного приложения, и вы мечтаете воплотить ее в жизнь? Эта книга поможет реализовать ваши идеи и станет незаменимым руководством по созданию приложений для Android с нуля!

Вы познакомитесь со всеми фундаментальными понятиями программирования для Android, начиная с основ Java и заканчивая работой с Android API.

Вы изучите основы создания мобильных приложений в Android Studio и принципы объектно-ориентированного программирования.

Вы освоите разработку приложений с профессиональным современным интерфейсом и возможностью хранения пользовательских данных в базе SQLite.

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

Вы будете готовы создавать собственные профессиональные приложения для Android на Java.

  • Фундаментальные основы программирования для Android
  • Использование всех возможностей Android Studio
  • Разработка современных интерфейсов для мобильных приложений и материальный дизайн
  • Синтаксис и возможности языка Java
  • Объектно-ориентированное программирование
  • Сохранение и совместное использование данных
  • Анимация, рисование и графика, звуковые эффекты
  • Поддержка различных версий Android и нескольких языков интерфейса
  • Использование баз данных

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

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

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

О чем эта книга…………………………………………………………………………………………………………………………… 18

Как получить максимум пользы от этой книги……………………………………………………………………….. 21

Файлы с примерами кода………………………………………………………………………………………………………….. 22

Цветные изображения……………………………………………………………………………………………………………….. 22

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

Контакты…………………………………………………………………………………………………………………………………….. 23

Отзывы………………………………………………………………………………………………………………………………………… 23

Глава 1. Начало работы с Android и Java…………………………………………………………………………….. 24

Технические требования…………………………………………………………………………………………………………… 25

Новое в третьем издании…………………………………………………………………………………………………………… 25

Почему Java и Android?…………………………………………………………………………………………………………….. 26

Первый камень преткновения для новичков……………………………………………………………………………. 27

Как Java и Android работают вместе……………………………………………………………………………………….. 27

Что такое Android API………………………………………………………………………………………………………… 28

Java — объектно-ориентированный язык программирования………………………………………. 29

Повторим: что такое Android…………………………………………………………………………………………….. 31

Android Studio……………………………………………………………………………………………………………………… 31

Настройка Android Studio…………………………………………………………………………………………………………. 32

Что делает приложение для Android?………………………………………………………………………………………. 35

Ресурсы Android…………………………………………………………………………………………………………………. 35

Структура кода Java в Android…………………………………………………………………………………………………. 36

Пакеты…………………………………………………………………………………………………………………………………. 36

Классы………………………………………………………………………………………………………………………………… 37

Методы……………………………………………………………………………………………………………………………….. 37

Создание нашего первого приложения для Android……………………………………………………………….. 38

Развертывание приложения на данном этапе…………………………………………………………………………. 42

Запуск и отладка приложения на эмуляторе Android…………………………………………………….. 43

Запуск приложения на реальном устройстве………………………………………………………………….. 45

Часто задаваемые вопросы………………………………………………………………………………………………………. 47

Итоги…………………………………………………………………………………………………………………………………………… 47

Глава 2. Первое знакомство: Java, XML и визуальный редактор…………………………………… 48

Технические требования…………………………………………………………………………………………………………… 48

Изучение вывода Logcat……………………………………………………………………………………………………………. 48

Фильтрация вывода Logcat……………………………………………………………………………………………….. 49

Java-проект и XML-код основной компоновки……………………………………………………………………….. 50

Файл MainActivity.java……………………………………………………………………………………………………… 50

Сворачивание (скрытие) кода в Android Studio……………………………………………………… 50

Объявление пакета……………………………………………………………………………………………………. 51

Импорт классов…………………………………………………………………………………………………………. 52

Класс………………………………………………………………………………………………………………………….. 52

Методы внутри класса……………………………………………………………………………………………… 53

Итог по коду Java на данный момент……………………………………………………………………… 53

Файл компоновки приложения………………………………………………………………………………………….. 53

Элементы компоновки пользовательского интерфейса………………………………………… 56

Текстовые элементы пользовательского интерфейса……………………………………………. 56

Элементы-кнопки пользовательского интерфейса………………………………………………… 57

Добавление кнопок в основной файл компоновки………………………………………………………………….. 57

Добавление кнопки с использованием визуального редактора…………………………………….. 58

Редактирование атрибутов кнопки…………………………………………………………………………. 60

XML-код новой кнопки…………………………………………………………………………………………….. 62

Добавление кнопки путем редактирования XML-кода………………………………………………….. 63

Назначение кнопкам уникальных атрибутов id……………………………………………………………… 65

Размещение двух кнопок в компоновке……………………………………………………………………………. 65

Как заставить кнопки вызывать разные методы……………………………………………………………… 68

Комментирование Java-кода…………………………………………………………………………………………………….. 69

Отправка сообщений пользователю и разработчику…………………………………………………………….. 69

Написание первого Java-кода………………………………………………………………………………………………….. 70

Добавление кода с сообщением в метод onCreate………………………………………………………….. 70

Изучение вывода……………………………………………………………………………………………………….. 71

Написание собственных методов Java…………………………………………………………………………….. 72

Изучение вывода……………………………………………………………………………………………………….. 74

Часто задаваемые вопросы………………………………………………………………………………………………………. 75

Итоги…………………………………………………………………………………………………………………………………………… 75

Глава 3. Android Studio и структура проекта………………………………………………………………………. 77

Технические требования…………………………………………………………………………………………………………… 78

Проводник проекта и анатомия проекта…………………………………………………………………………………. 78

Структура файлов и папок в шаблоне проекта Empty Activity…………………………………………….. 78

Проект Empty Activity………………………………………………………………………………………………………… 80

Папка manifests………………………………………………………………………………………………………….. 81

Папка java………………………………………………………………………………………………………………….. 83

Папка Java (generated)……………………………………………………………………………………………… 86

Папка res……………………………………………………………………………………………………………………. 86

Папка res/drawable……………………………………………………………………………………………………. 86

Папка res/layout………………………………………………………………………………………………………… 87

Папка res/mipmap………………………………………………………………………………………………………. 87

Папка res/values………………………………………………………………………………………………………… 89

Файл colors.xml………………………………………………………………………………………………………….. 89

Файл strings.xml…………………………………………………………………………………………………………. 90

Cтруктура файлов и папок в шаблоне проекта Basic Activity……………………………………………….. 92

Проект Basic Activity………………………………………………………………………………………………………………….. 93

Файл MainActivity.java……………………………………………………………………………………………… 93

Файл activity_main.xml……………………………………………………………………………………………… 96

Дополнительные методы в MainActivity.java…………………………………………………………. 97

Эмулятор Android………………………………………………………………………………………………………………………. 98

Панель управления эмулятором……………………………………………………………………………………….. 99

Использование эмулятора как реального устройства………………………………………………….. 100

Доступ к панели приложений………………………………………………………………………………… 100

Просмотр активных приложений и переключение между приложениями………… 101

Итоги…………………………………………………………………………………………………………………………………………. 102

Глава 4. Начало работы с компоновками и материальный дизайн…………………………….. 103

Технические требования…………………………………………………………………………………………………………. 104

Материальный дизайн…………………………………………………………………………………………………………….. 104

Дизайн пользовательского интерфейса Android…………………………………………………………………… 104

Компоновки………………………………………………………………………………………………………………………………. 105

Создание и изучение проекта компоновок…………………………………………………………………….. 105

Создание компоновки с помощью LinearLayout…………………………………………………………… 106

Добавление типа компоновки LinearLayout в проект…………………………………………………… 107

Подготовка рабочего пространства………………………………………………………………………………. 108

Изучение сгенерированного XML-кода…………………………………………………………………………. 108

Добавление TextView в пользовательский интерфейс………………………………………………….. 110

Добавление многострочного TextView в пользовательский интерфейс……………………… 112

Подключение пользовательского интерфейса с помощью кода Java. Часть 1…………… 113

Добавление компоновок в компоновки………………………………………………………………………….. 116

Украшение компоновки…………………………………………………………………………………………………… 119

Подключение пользовательского интерфейса с помощью кода Java. Часть 2…………… 121

Создание точного пользовательского интерфейса с помощью ConstraintLayout……………… 121

Добавление CalendarView……………………………………………………………………………………………….. 121

Изменение размера представления в ConstraintLayout……………………………………….. 122

Использование окна Component Tree……………………………………………………………………. 122

Добавление ограничений вручную……………………………………………………………………….. 124

Добавление и ограничение дополнительных элементов пользовательского интерфейса 126

Создание интерактивного текста……………………………………………………………………………………. 128

Размещение данных с помощью TableLayout……………………………………………………………………….. 129

Добавление элемента TableRow…………………………………………………………………………………….. 130

Использование Component Tree для решения задач, невыполнимых
в визуальном редакторе…………………………………………………………………………………………. 130

Организация столбцов таблицы……………………………………………………………………………………… 132

Добавление ссылки на главное меню…………………………………………………………………………………….. 134

Итоги…………………………………………………………………………………………………………………………………………. 135

Глава 5. Красивые компоновки на основе CardView и ScrollView………………………………… 136

Технические требования…………………………………………………………………………………………………………. 136

Атрибуты пользовательского интерфейса…………………………………………………………………………….. 136

Размеры и использование dp…………………………………………………………………………………………… 136

Размеры шрифтов и использование sp……………………………………………………………………………. 137

Определение размера с wrap и match…………………………………………………………………………….. 139

Использование padding и margin……………………………………………………………………………………. 140

Использование свойства layout_weight…………………………………………………………………………. 141

Использование gravity……………………………………………………………………………………………………… 142

Создание пользовательского интерфейса с помощью CardView и ScrollView…………………… 144

Настройка представления с помощью кода Java…………………………………………………………. 144

Добавление изображений……………………………………………………………………………………………….. 145

Создание контента для карточек……………………………………………………………………………………. 146

Определение размеров для CardView…………………………………………………………………………….. 149

Добавление CardView в компоновку………………………………………………………………………………. 149

Добавление файлов компоновки внутрь другой компоновки……………………………… 151

Создание эмулятора планшета………………………………………………………………………………………………. 154

Часто задаваемые вопросы…………………………………………………………………………………………………….. 156

Итоги…………………………………………………………………………………………………………………………………………. 156

Глава 6. Жизненный цикл Android…………………………………………………………………………………….. 157

Технические требования…………………………………………………………………………………………………………. 157

Жизнь приложения для Android……………………………………………………………………………………………… 158

Взаимодействие Android с приложениями…………………………………………………………………………….. 158

Упрощенное объяснение жизненного цикла Android……………………………………………………………. 159

Демистификация фаз жизненного цикла………………………………………………………………………… 160

Работа с фазами жизненного цикла……………………………………………………………………………………….. 161

Демонстрационное приложение жизненного цикла…………………………………………………………….. 163

Написание кода для демонстрационного приложения жизненного цикла………………… 164

Запуск демонстрационного приложения жизненного цикла……………………………………….. 166

Вывод демонстрационного приложения жизненного цикла………………………………………… 167

Некоторые другие переопределенные методы……………………………………………………………… 168

Еще раз о структуре кода Java……………………………………………………………………………………………….. 170

Представление фрагментов и жизненного цикла………………………………………………………………….. 171

Итоги…………………………………………………………………………………………………………………………………………. 172

Глава 7. Переменные, операторы и выражения Java………………………………………………………. 173

Технические требования…………………………………………………………………………………………………………. 173

Java повсюду……………………………………………………………………………………………………………………………. 174

Синтаксис и жаргон Java………………………………………………………………………………………………………… 174

Дополнительные комментарии к коду……………………………………………………………………………. 175

Хранение и использование данных с переменными…………………………………………………………….. 177

Типы переменных…………………………………………………………………………………………………………….. 178

Примитивные типы…………………………………………………………………………………………………. 178

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

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

Объявление переменной………………………………………………………………………………………………………….. 182

Инициализация переменной……………………………………………………………………………………………………. 183

Изменение значений переменных с помощью операторов………………………………………………….. 184

Оператор присваивания………………………………………………………………………………………………….. 184

Оператор сложения………………………………………………………………………………………………………….. 184

Оператор вычитания……………………………………………………………………………………………………….. 185

Оператор деления…………………………………………………………………………………………………………….. 185

Оператор умножения……………………………………………………………………………………………………….. 185

Оператор инкремента………………………………………………………………………………………………………. 186

Оператор декремента………………………………………………………………………………………………………. 186

Выражения Java………………………………………………………………………………………………………………………. 186

Демоприложение Expressing Yourself…………………………………………………………………………….. 187

Итог…………………………………………………………………………………………………………………………………………… 189

Глава 8. Условия и циклы Java…………………………………………………………………………………………… 190

Технические требования…………………………………………………………………………………………………………. 190

Принятие решений в Java………………………………………………………………………………………………………… 191

Отступы в коде для ясности…………………………………………………………………………………………….. 191

Больше операторов………………………………………………………………………………………………………….. 192

Оператор сравнения……………………………………………………………………………………………….. 192

Логический оператор отрицания…………………………………………………………………………… 192

Оператор НЕравенства………………………………………………………………………………………….. 193

Оператор «больше»………………………………………………………………………………………………… 193

Оператор «меньше»………………………………………………………………………………………………… 193

Оператор «больше или равно»………………………………………………………………………………. 193

Оператор «меньше или равно»………………………………………………………………………………. 193

Логический оператор «И»………………………………………………………………………………………. 193

Логический оператор «ИЛИ»…………………………………………………………………………………. 194

Оператор модуля…………………………………………………………………………………………………….. 194

Использование операторов для проверки переменных………………………………………………… 194

Использование ключевого слова if языка Java…………………………………………………….. 194

Switch и принятие решений…………………………………………………………………………………………………….. 197

Демоприложение Switch………………………………………………………………………………………………….. 198

Повторение кода с циклами……………………………………………………………………………………………………. 200

Циклы while………………………………………………………………………………………………………………………. 200

Выход из цикла……………………………………………………………………………………………………….. 202

Ключевое слово continue……………………………………………………………………………………….. 203

Циклы do while…………………………………………………………………………………………………………………. 204

Циклы for………………………………………………………………………………………………………………………………….. 205

Демоприложение Loops для работы с циклами……………………………………………………………………. 206

Итоги…………………………………………………………………………………………………………………………………………. 209

Глава 9. Методы Java…………………………………………………………………………………………………………….. 210

Технические требования…………………………………………………………………………………………………………. 210

Еще раз о методах……………………………………………………………………………………………………………………. 210

Java-методы……………………………………………………………………………………………………………………… 211

Структура метода……………………………………………………………………………………………………………………. 211

Модификатор……………………………………………………………………………………………………………………. 212

Возвращаемый тип…………………………………………………………………………………………………………… 213

Имя метода……………………………………………………………………………………………………………………….. 214

Параметры………………………………………………………………………………………………………………………… 215

Тело метода………………………………………………………………………………………………………………………. 216

Демонстрационное приложение для изучения методов………………………………………………………. 216

Методы Real world…………………………………………………………………………………………………………… 217

Обнаружение области видимости переменной……………………………………………………. 218

Перегрузка метода…………………………………………………………………………………………………………………… 219

Еще раз об области видимости и переменных………………………………………………………………………. 221

Рекурсия метода………………………………………………………………………………………………………………………. 222

Вопросы……………………………………………………………………………………………………………………………………. 224

Итоги…………………………………………………………………………………………………………………………………………. 225

Самостоятельное чтение…………………………………………………………………………………………………………. 226

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

Технические требования…………………………………………………………………………………………………………. 227

Важное предупреждение об управлении памятью………………………………………………………………. 227

Объектно-ориентированное программирование………………………………………………………………….. 228

Что такое ООП?………………………………………………………………………………………………………………… 228

Инкапсуляция………………………………………………………………………………………………………….. 228

Полиморфизм…………………………………………………………………………………………………………… 229

Наследование………………………………………………………………………………………………………….. 229

Почему надо делать именно так?…………………………………………………………………………………… 230

Резюме: класс……………………………………………………………………………………………………………………. 230

Код класса………………………………………………………………………………………………………………………………… 230

Реализация класса……………………………………………………………………………………………………………. 231

Объявление, инициализация и использование объекта класса……………………………………. 231

Приложение Basic Classes……………………………………………………………………………………………………….. 234

Что еще можно сделать с нашим первым классом………………………………………………………… 237

Часто задаваемые вопросы…………………………………………………………………………………………………….. 238

Итоги…………………………………………………………………………………………………………………………………………. 238

Глава 11. Больше объектно-ориентированного программирования…………………………… 239

Технические требования…………………………………………………………………………………………………………. 239

Вы еще помните об инкапсуляции?……………………………………………………………………………………….. 239

Управление доступом к классам с помощью модификаторов доступа………………………. 240

Модификаторы доступа к классам……………………………………………………………………….. 241

Резюме: доступ к классам………………………………………………………………………………………. 241

Управление доступом к переменным с помощью модификаторов доступа……………….. 241

Модификаторы доступа к переменным………………………………………………………………… 242

Резюме: доступ к переменным……………………………………………………………………………….. 243

Методы и модификаторы доступа…………………………………………………………………………………. 243

Модификаторы доступа к методам………………………………………………………………………. 243

Резюме: доступ к методу………………………………………………………………………………………… 244

Доступ к private-переменным с помощью геттеров и сеттеров………………………………… 244

Настройка объектов с помощью конструкторов…………………………………………………………… 247

Статические методы………………………………………………………………………………………………………………… 249

Мини-приложение инкапсуляции и статических методов…………………………………………………… 251

ООП и наследование……………………………………………………………………………………………………………….. 255

Приложение с наследованием………………………………………………………………………………………………… 257

Полиморфизм……………………………………………………………………………………………………………………………. 261

Абстрактные классы………………………………………………………………………………………………………… 262

Интерфейсы………………………………………………………………………………………………………………………. 263

Часто задаваемые вопросы…………………………………………………………………………………………………….. 265

Итоги…………………………………………………………………………………………………………………………………………. 265

Глава 12. Стек, куча и сборщик мусора…………………………………………………………………………….. 266

Технические требования…………………………………………………………………………………………………………. 266

Все элементы пользовательского интерфейса Android — тоже классы……………………………… 266

Ссылки: повторное знакомство………………………………………………………………………………………. 267

Небольшой перерыв, чтобы выбросить мусор…………………………………………………….. 267

Шесть фактов о стеке и куче………………………………………………………………………………….. 268

В чем польза этой кучи?………………………………………………………………………………………………….. 268

Использование кнопок и виджетов TextView из компоновки………………………………………… 269

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

Внутренние и анонимные классы…………………………………………………………………………………………… 278

Часто задаваемые вопросы…………………………………………………………………………………………………….. 279

Итоги…………………………………………………………………………………………………………………………………………. 279

Глава 13. Анонимные классы. Оживление виджетов Android……………………………………….. 280

Технические требования…………………………………………………………………………………………………………. 281

Объявление и инициализация объектов…………………………………………………………………………………. 281

Создание виджетов пользовательского интерфейса из Java без XML……………………………….. 281

Изучение палитры. Часть 1…………………………………………………………………………………………………….. 282

Виджет EditText………………………………………………………………………………………………………………… 283

Виджет ImageView……………………………………………………………………………………………………………. 283

Радиокнопки и группы…………………………………………………………………………………………………….. 284

Анонимные классы………………………………………………………………………………………………………………….. 285

Изучение палитры и анонимные классы. Часть 2…………………………………………………………………. 288

Switch………………………………………………………………………………………………………………………………… 288

CheckBox…………………………………………………………………………………………………………………………… 289

TextClock…………………………………………………………………………………………………………………………… 290

Использование WebView………………………………………………………………………………………………….. 290

Приложение Widget Exploration……………………………………………………………………………………………… 291

Настройка проекта Widget Exploration и его пользовательского интерфейса……………. 291

Написание кода для приложения Widget Exploration…………………………………………………… 297

Получение ссылок на все части пользовательского интерфейса……………………….. 297

Написание кода с чекбоксами……………………………………………………………………………….. 299

Написание кода с радиокнопками………………………………………………………………………… 301

Использование анонимного класса для обычной кнопки Button……………………….. 302

Написание кода для виджета Switch…………………………………………………………………….. 303

Использование WebView…………………………………………………………………………………………………………. 304

Запуск приложения Widget Exploration………………………………………………………………………………….. 304

Итоги…………………………………………………………………………………………………………………………………………. 306

Глава 14. Диалоговые окна Android…………………………………………………………………………………… 307

Технические требования…………………………………………………………………………………………………………. 307

Диалоговые окна……………………………………………………………………………………………………………………… 307

Создание проекта Dialog Demo………………………………………………………………………………………. 308

Написание кода класса DialogFragment……………………………………………………………………….. 308

Использование цепочки для конфигурации DialogFragment……………………………… 310

Использование класса DialogFragment…………………………………………………………………………. 311

Приложение Note to Self………………………………………………………………………………………………………….. 313

Применение соглашений об именах и строковых ресурсах………………………………………… 314

Получение файлов кода для приложения Note to Self………………………………………………….. 314

Завершенное приложение……………………………………………………………………………………………….. 315

Создание проекта…………………………………………………………………………………………………………….. 318

Подготовка строковых ресурсов…………………………………………………………………………………….. 318

Написание кода класса Note…………………………………………………………………………………………… 319

Реализация компоновок для диалоговых окон……………………………………………………………… 321

Написание кода диалоговых окон…………………………………………………………………………………. 325

Написание кода класса DialogNewNote……………………………………………………………….. 325

Написание кода класса DialogShowNote……………………………………………………………… 329

Удаление ненужных автосгенерированных фрагментов……………………………………. 331

Демонстрация диалоговых окон…………………………………………………………………………………….. 332

Написание кода плавающей кнопки действия…………………………………………………….. 333

Итоги…………………………………………………………………………………………………………………………………………. 336

Глава 15. Массивы, словари Map и случайные числа……………………………………………………… 337

Технические требования…………………………………………………………………………………………………………. 337

«Случайное» отступление………………………………………………………………………………………………………. 338

Обработка больших объемов данных с помощью массивов……………………………………………….. 338

Массивы — это объекты…………………………………………………………………………………………………. 340

Пример мини-приложения с простым массивом…………………………………………………………………… 341

Реализация динамического массива………………………………………………………………………………………. 342

Мини-приложение с динамическим массивом………………………………………………………………. 343

Работа с многомерными массивами………………………………………………………………………………………. 344

Мини-приложение с многомерным массивом……………………………………………………………….. 344

Исключения Array-out-of-bounds…………………………………………………………………………………….. 347

Структура данных ArrayList…………………………………………………………………………………………………… 348

Расширенный цикл for……………………………………………………………………………………………………… 349

Полиморфизм массивов и экземпляров ArrayList………………………………………………………………….. 350

Больше коллекций Java: HashMap…………………………………………………………………………………………. 351

Приложение Note to Self………………………………………………………………………………………………………….. 352

Часто задаваемые вопросы…………………………………………………………………………………………………….. 353

Итоги…………………………………………………………………………………………………………………………………………. 353

Глава 16. Адаптеры и классы Recycler……………………………………………………………………………….. 354

Технические требования…………………………………………………………………………………………………………. 354

RecyclerView и RecyclerAdapter………………………………………………………………………………………………. 354

Проблема с отображением большого количества виджетов……………………………………….. 355

Решение проблемы отображения большого количества виджетов…………………………….. 355

Практическое применение RecyclerView и RecyclerAdapter…………………………………………. 356

Настройка RecyclerView с RecyclerAdapter и заметками ArrayList……………………………… 357

Добавление RecyclerView, RecyclerAdapter и ArrayList в проект Note to Self……………………… 358

Удаление временной кнопки Show Note и добавление RecyclerView………………………………….. 358

Создание элемента списка для RecyclerView………………………………………………………………… 359

Написание кода класса RecyclerAdapter……………………………………………………………………….. 360

Написание кода конструктора NoteAdapter………………………………………………………… 364

Написание кода метода onCreateViewHolder………………………………………………………. 364

Написание метода onBindViewHolder………………………………………………………………….. 365

Написание кода метода getItemCount…………………………………………………………………… 365

Написание кода внутреннего класса ListItemHolder…………………………………………… 366

Написание кода MainActivity для использования классов RecyclerView и RecyclerAdapter          367

Добавление кода в метод onCreate……………………………………………………………………….. 367

Изменение метода addNote…………………………………………………………………………………….. 368

Написание метода showNote…………………………………………………………………………………. 368

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

Часто задаваемые вопросы…………………………………………………………………………………………………….. 370

Итоги…………………………………………………………………………………………………………………………………………. 370

Глава 17. Сохранение и совместное использование данных…………………………………………. 371

Технические требования…………………………………………………………………………………………………………. 371

«Намерения» Android………………………………………………………………………………………………………………. 372

Переключение Activity……………………………………………………………………………………………………… 372

Передача данных между активностями…………………………………………………………………………. 373

Добавление страницы настроек в Note to Self………………………………………………………………………. 374

Создание SettingsActivity…………………………………………………………………………………………………. 374

Разработка компоновки экрана настроек……………………………………………………………………… 375

Предоставление пользователю возможности переключаться на экран настроек…….. 375

Сохранение данных с помощью SharedPreferences……………………………………………………………… 377

Загрузка данных с помощью SharedPreferences…………………………………………………………………… 378

Сохранение настроек приложения Note to Self…………………………………………………………………….. 379

Написание кода класса SettingsActivity…………………………………………………………………………. 379

Написание кода класса MainActivity……………………………………………………………………………… 381

Более продвинутый способ сохранения данных………………………………………………………………….. 383

Классы JSON…………………………………………………………………………………………………………………….. 383

Исключения Java: try, catch и finally………………………………………………………………………………. 384

Резервное копирование пользовательских данных в Note to Self……………………………………….. 385

Часто задаваемые вопросы…………………………………………………………………………………………………….. 391

Итоги…………………………………………………………………………………………………………………………………………. 391

Глава 18. Локализация…………………………………………………………………………………………………………. 392

Технические требования…………………………………………………………………………………………………………. 392

Реализация поддержки испанского и немецкого языков в приложении Note to Self………….. 392

Добавление поддержки испанского языка…………………………………………………………………….. 393

Добавление поддержки немецкого языка………………………………………………………………………. 393

Добавление строковых ресурсов……………………………………………………………………………………. 394

Запуск приложения Note to Self на немецком или испанском языке…………………………………… 396

Выполнение переводов в коде Java………………………………………………………………………………… 396

Итоги…………………………………………………………………………………………………………………………………………. 399

Глава 19. Анимация и интерполяторы………………………………………………………………………………. 400

Технические требования…………………………………………………………………………………………………………. 400

Анимации в Android…………………………………………………………………………………………………………………. 400

Создание интересной анимации в XML…………………………………………………………………………. 401

Исчезновение и появление……………………………………………………………………………………… 401

Движение…………………………………………………………………………………………………………………. 401

Масштабирование, или растяжение……………………………………………………………………… 401

Контроль продолжительности………………………………………………………………………………. 402

Вращение…………………………………………………………………………………………………………………. 402

Повторение анимации…………………………………………………………………………………………….. 402

Комбинирование эффектов анимации с помощью set…………………………………………. 402

Создание анимаций и управление ими с помощью кода Java…………………………………….. 403

Дополнительные функции анимации……………………………………………………………………………… 403

Слушатели анимации…………………………………………………………………………………………….. 403

Интерполяторы анимации……………………………………………………………………………………… 404

Демонстрационное приложение анимации. Знакомство с SeekBar…………………………………….. 405

Демонстрационная анимация…………………………………………………………………………………………. 405

Написание кода XML-анимации……………………………………………………………………………………. 408

Использование Java в демонстрационном приложении анимации…………………………….. 412

Часто задаваемые вопросы…………………………………………………………………………………………………….. 420

Итоги…………………………………………………………………………………………………………………………………………. 421

Глава 20. Рисование и графика…………………………………………………………………………………………… 422

Технические требования…………………………………………………………………………………………………………. 422

Понятие о классе Canvas…………………………………………………………………………………………………………. 422

Рисование с помощью Bitmap, Canvas и ImageView……………………………………………………… 423

Canvas и Bitmap………………………………………………………………………………………………………. 423

Paint…………………………………………………………………………………………………………………………. 423

ImageView и Activity………………………………………………………………………………………………… 424

Краткий обзор Canvas, Bitmap, Paint и ImageView………………………………………………. 424

Использование класса Canvas………………………………………………………………………………………………… 425

Подготовка экземпляров необходимых классов…………………………………………………………… 425

Инициализация объектов………………………………………………………………………………………………… 425

Настройка содержимого Activity……………………………………………………………………………………. 426

Демонстрационное приложение Canvas……………………………………………………………………………….. 426

Создание нового проекта………………………………………………………………………………………………… 426

Написание кода демонстрационного приложения Canvas………………………………… 427

Инициализация Bitmap…………………………………………………………………………………………… 428

Рисование на экране……………………………………………………………………………………………….. 428

Метод Color.argb……………………………………………………………………………………………………. 429

Система координат Android……………………………………………………………………………………………………. 431

Черчение и рисование……………………………………………………………………………………………………… 431

Создание растровых изображений………………………………………………………………………………………… 432

Управление растровыми изображениями……………………………………………………………………………… 433

Что такое растровое изображение…………………………………………………………………………………. 433

Класс Matrix……………………………………………………………………………………………………………………… 433

Поворот растрового изображения в противоположное направление……………….. 434

Поворот растрового изображения вверх или вниз………………………………………………. 435

Демонстрационное приложение для работы с растровыми изображениями…………………….. 436

Добавление графики в проект…………………………………………………………………………………………. 436

Часто задаваемые вопросы…………………………………………………………………………………………………….. 440

Итоги…………………………………………………………………………………………………………………………………………. 440

Глава 21. Потоки. Разработка приложения для интерактивного рисования……………… 441

Технические требования…………………………………………………………………………………………………………. 441

Создание проекта Live Drawing………………………………………………………………………………………………. 441

Рефакторинг MainActivity в LiveDrawingActivity…………………………………………………………… 442

Блокировка игры в полноэкранном альбомном режиме………………………………………………. 442

Создание классов для нового приложения…………………………………………………………… 443

О структуре приложения Live Drawing…………………………………………………………………………… 443

Написание кода класса LiveDrawingActivity…………………………………………………………………. 444

Написание кода класса LiveDrawingView……………………………………………………………………… 447

Добавление полей класса………………………………………………………………………………………. 449

Написание кода конструктора LiveDrawingView………………………………………………… 451

Написание кода метода draw………………………………………………………………………………… 453

Добавление метода printDebuggingText……………………………………………………………….. 454

Метод draw и класс SurfaceView…………………………………………………………………………… 455

Игровой цикл……………………………………………………………………………………………………………………………. 456

Потоки………………………………………………………………………………………………………………………………………. 458

Возможные проблемы с потоками………………………………………………………………………………….. 459

Реализация игрового цикла с помощью потока……………………………………………………………………. 462

Реализация Runnable и подготовка метода run…………………………………………………………….. 462

Написание кода потока…………………………………………………………………………………………………… 463

Запуск и остановка потока……………………………………………………………………………………………… 463

Использование жизненного цикла Activity для запуска и остановки потока……………… 464

Написание кода метода run……………………………………………………………………………………………. 464

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

Итоги…………………………………………………………………………………………………………………………………………. 468

Глава 22. Системы частиц и обработка касаний экрана……………………………………………….. 469

Технические требования…………………………………………………………………………………………………………. 469

Добавление пользовательских кнопок на экран…………………………………………………………………… 470

Реализация эффекта системы частиц…………………………………………………………………………………….. 470

Написание кода класса Particle……………………………………………………………………………………… 471

Написание кода класса ParticleSystem………………………………………………………………………….. 473

Создание систем частиц в классе LiveDrawingView……………………………………………………… 478

Обработка касаний………………………………………………………………………………………………………………….. 479

Написание кода метода onTouchEvent………………………………………………………………………….. 481

Завершение создания HUD……………………………………………………………………………………………… 482

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

Profiler: инструмент профилирования Android Studio………………………………………………………….. 484

Итоги…………………………………………………………………………………………………………………………………………. 487

Глава 23. Поддержка различных версий Android, звуковые эффекты
и виджет Spinner……………………………………………………………………………………………………………………… 488

Работа с разными версиями Android………………………………………………………………………………………. 488

Определение текущей версии Android……………………………………………………………………………. 489

Класс SoundPool……………………………………………………………………………………………………………………… 489

Инициализация SoundPool новым способом…………………………………………………………………. 490

Инициализация SoundPool старым способом……………………………………………………………….. 491

Загрузка звуковых файлов в память……………………………………………………………………… 491

Воспроизведение звука…………………………………………………………………………………………… 492

Остановка звука………………………………………………………………………………………………………. 493

Звуковое демонстрационное приложение и знакомство с виджетом Spinner……………………. 493

Создание звуковых эффектов………………………………………………………………………………………….. 493

Настройка звука………………………………………………………………………………………………………………. 496

Написание кода звукового демоприложения………………………………………………………………… 498

Итоги…………………………………………………………………………………………………………………………………………. 502

Глава 24. Шаблоны проектирования, множество компоновок и фрагменты…………….. 503

Технические требования…………………………………………………………………………………………………………. 503

Паттерн model-view-controller………………………………………………………………………………………………… 504

Рекомендации по дизайну приложений для Android…………………………………………………………….. 505

Реальные приложения……………………………………………………………………………………………………………… 506

Мини-приложение для обнаружения устройств…………………………………………………………………… 508

Написание кода класса MainActivity……………………………………………………………………………… 511

Разблокировка автоповорота экрана……………………………………………………………………. 512

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

Квалификаторы конфигурации………………………………………………………………………………………………. 514

Ограничение квалификаторов конфигурации……………………………………………………………….. 516

Фрагменты………………………………………………………………………………………………………………………………… 517

Фрагменты: жизненный цикл………………………………………………………………………………………….. 517

Управление фрагментами с помощью FragmentManager…………………………………………….. 517

Наше первое приложение с Fragment……………………………………………………………………………………. 519

Проверка фрагмента в реальных условиях…………………………………………………………………………… 524

Часто задаваемые вопросы…………………………………………………………………………………………………….. 525

Итоги…………………………………………………………………………………………………………………………………………. 525

Глава 25. Создание приложения простой галереи изображений…………………………………… 526

Технические требования…………………………………………………………………………………………………………. 526

Классическое свайп-меню Angry Birds…………………………………………………………………………………… 526

Создание галереи изображений (слайдера)………………………………………………………………………….. 527

Реализация компоновки…………………………………………………………………………………………………… 528

Написание кода класса PagerAdapter……………………………………………………………………………. 529

Написание кода класса MainActivity……………………………………………………………………………… 531

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

Итог…………………………………………………………………………………………………………………………………………… 533

Глава 26. Расширенный пользовательский интерфейс с Navigation Drawer и Fragment 534

Технические требования…………………………………………………………………………………………………………. 534

Знакомство с NavigationView…………………………………………………………………………………………………. 535

Простое приложение базы данных………………………………………………………………………………………… 536

Insert………………………………………………………………………………………………………………………………….. 536

Delete…………………………………………………………………………………………………………………………………. 536

Search………………………………………………………………………………………………………………………………… 537

Results………………………………………………………………………………………………………………………………… 538

Реализация проекта Age Database………………………………………………………………………………………….. 538

Изучение автоматически сгенерированного кода и ресурсов…………………………………………….. 538

Написание кода классов Fragment и их компоновок……………………………………………………. 540

Создание пустых файлов для классов и компоновок……………………………………………………. 540

Написание классов………………………………………………………………………………………………………….. 540

Разработка компоновок…………………………………………………………………………………………………… 543

Разработка content_insert.xml…………………………………………………………………………………………. 543

Разработка content_delete.xml………………………………………………………………………………………… 543

Разработка content_search.xml……………………………………………………………………………………….. 544

Разработка content_results.xml……………………………………………………………………………………….. 545

Использование классов Fragment и их компоновок……………………………………………………………… 545

Редактирование меню Navigation Drawer……………………………………………………………………… 545

Добавление держателя к основной компоновке……………………………………………………………. 546

Написание кода класса MainActivity.java……………………………………………………………………… 547

Итоги…………………………………………………………………………………………………………………………………………. 550

Глава 27. Базы данных Android…………………………………………………………………………………………… 551

Технические требования…………………………………………………………………………………………………………. 551

Базы данных…………………………………………………………………………………………………………………………….. 552

Что такое база данных?…………………………………………………………………………………………………… 552

Что такое SQL?…………………………………………………………………………………………………………………. 552

Что такое SQLite?……………………………………………………………………………………………………………… 552

Учебник по синтаксису SQL……………………………………………………………………………………………………. 553

Пример кода SQLite………………………………………………………………………………………………………….. 553

Создание таблицы………………………………………………………………………………………………….. 553

Добавление данных в базу…………………………………………………………………………………….. 554

Получение данных из базы……………………………………………………………………………………. 554

Обновление структуры базы данных……………………………………………………………………. 555

Android SQLite API…………………………………………………………………………………………………………………… 555

SQLiteOpenHelper и SQLiteDatabase………………………………………………………………………………. 555

Создание и выполнение запросов…………………………………………………………………………………… 555

Курсоры базы данных…………………………………………………………………………………………………….. 557

Написание кода класса базы данных……………………………………………………………………………………. 558

Написание кода классов Fragment для использования класса DataManager……………………. 562

Запуск приложения Age Database………………………………………………………………………………………….. 565

Итоги…………………………………………………………………………………………………………………………………………. 567

Глава 28. Краткое напутствие перед расставанием…………………………………………………………. 568

Публикация приложения…………………………………………………………………………………………………………. 568

Создайте приложение!…………………………………………………………………………………………………………….. 569

Продолжайте учиться……………………………………………………………………………………………………………… 569

Продолжайте читать……………………………………………………………………………………………………….. 569

GitHub……………………………………………………………………………………………………………………………….. 570

Stack Overflow…………………………………………………………………………………………………………………… 570

Форумы пользователей Android……………………………………………………………………………………… 572

Обучение более высокого уровня…………………………………………………………………………………… 572

Каналы связи с автором………………………………………………………………………………………………………….. 572

До свидания и спасибо!…………………………………………………………………………………………………………… 573

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

Джон Хортон — энтузиаст программирования и игр из Великобритании. У него страсть к написанию приложений, игр, книг и статей в блогах. Он является основателем Game Code School.

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

Новая книга от автора бестселлера по тестированию!

Тест-дизайн. Практическое руководство для начинающих

В нашем издательстве вышла новая книга Ольги Назиной – автора бестселлера “Что такое тестирование. Курс молодого бойца”. Книга называется “Тест-дизайн. Практическое руководство для начинающих”.

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

Почему у некоторых тестировщиков получается придумывать полезные тесты лучше, чем у других? Почему они реже пропускают баги? Может быть, они знают какие-то секретные приемы и техники? Ничего подобного! Эффективные тестировщики применяют те же самые приемы, что и все остальные. Разница лишь в том, КАК они их применяют.
О каких приемах идет речь? Разбиение на классы эквивалентности, pairwise, деревья решений, диаграммы состояний и переходов — все эти и другие техники подробно и с наглядными примерами описаны в этой книге. А еще в ней рассказано, как и в каких случаях их нужно применять.

В книге есть бонус — подборка чек-листов для стандартных операций. Это такие «напоминалочки»: что нужно не забыть проверить в той или иной ситуации. Используйте их в работе, пополняйте и расширяйте в соответствии с особенностями своей системы!

  • Выделяем классы эквивалентности
  • Ищем границы в классах эквивалентности
  • Применяем готовые чек-листы
  • Исследуем приложение по турам
  • Пишем варианты использования функций
  • Оформляем Decision Table
  • Рисуем State & Transition Diagram

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

Ольга Назина

Ольга Назина — основатель Багреда (справочного ресурса для тестировщиков) и портала Testbase, на котором собраны полезные материалы по тестированию. Автор статей на Хабре и бесплатных уроков на Youtube. 13 лет проработала в тестировании, 6 из которых активно учила новичков. Провела более 110 курсов для начинающих тестировщиков, материал которых послужил основой для этой книги.

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

Готовимся к ЕГЭ 2023 по химии!

ЕГЭ по химии. Теоретическая и практическая подготовка

Вышла книга “ЕГЭ по химии. Теоретическая и практическая подготовка“, включающая более 700 самых свежих тренировочных заданий для Единого Государственного Экзамена по химии 2023 года!

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

В книге представлены 15 авторских тренировочных вариантов, составленных с учетом всех требований кодификатора ЕГЭ по химии 2023 года и включающих в себя все последние изменения в структуре экзамена. Даются ответы к приведенным тестовым заданиям и тренировочным вариантам.

Книгу “ЕГЭ по химии. Теоретическая и практическая подготовка” можно купить со скидкой в интернет-магазине издательства “БХВ“.

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

Глава 1. Теоретические основы химии и общая химия. 9

1.1. Современные представления о строении атома. 9

1.2. Валентность и степень окисления. 21

1.3. Классификация и номенклатура неорганических соединений. 28

1.3.1. Бинарные соединения. 28

1.3.2. Гидроксиды. 32

1.3.3. Кислоты. 33

1.3.4. Соли. 35

1.3.5. Комплексные соединения. 38

1.4. Периодический закон и Периодическая система химических элементов
Д. И. Менделеева. 39

1.5. Химические связи. 43

1.5.1. Ковалентная связь. 43

1.5.2. Ионная связь. 50

1.5.3. Металлическая связь. 51

1.5.4. Водородная связь. 51

1.6. Строение веществ и кристаллические решётки. 52

1.7. Раствор. Растворимость. 57

1.8. Электролитическая диссоциация. 58

1.9. Химические реакции. 60

1.9.1. Физические и химические явления. 60

1.9.2. Составление уравнений химических реакций. 60

1.9.3. Классификация химических реакций. 62

1.10. Скорость химической реакции. Факторы, влияющие на скорость реакции. 65

1.11. Химическое равновесие. Факторы, влияющие на смещение химического равновесия  68

1.12. Реакции ионного обмена. 71

1.13. Водородный показатель pH. Индикаторы. 76

1.14. Гидролиз солей. Определение среды водных растворов веществ. 77

1.15. Окислительно-восстановительные реакции. Метод электронного баланса. 81

1.16. Электролиз. 93

1.17. Методы решения расчётных задач. 98

1.17.1. Расчёты с использованием понятия «массовая доля». 100

1.17.2. Расчёты с использованием понятия «количество вещества». 105

1.17.3. Расчёты по уравнениям реакций. 109

1.17.4. Расчёты с использованием понятия «химическое равновесие». 111

1.17.5. Объёмные отношения газов в химических реакциях. 114

1.17.6. Тепловой эффект химической реакции. 115

1.17.7. Расчёт массовой доли примесей. 117

1.17.8. Выход продукта реакции. 119

Итоговый тест по теоретическим основам химии и общей химии. 121

Глава 2. Основы неорганической химии. 135

2.1. Оксиды. 135

2.1.1. Химические свойства кислотных оксидов. 135

2.1.2. Химические свойства основных оксидов. 139

2.1.3. Химические свойства амфотерных оксидов. 140

2.1.4. Несолеобразующие оксиды. 142

2.1.5. Восстановительные свойства оксидов. 142

2.1.6. Окислительные свойства оксидов. 143

2.1.7. Получение оксидов. 144

2.2. Гидроксиды. 152

2.2.1. Основания. 152

2.2.2. Амфотерные гидроксиды. 156

2.3. Кислоты. 160

2.4. Серная кислота. 166

2.5. Азотная кислота. 174

2.6. Средние соли. 181

2.7. Кислые соли. 187

2.8. Средние и комплексные соли амфотерных металлов. 192

2.9. Необратимый гидролиз бинарных соединений. 196

2.10. Методы решения расчётных задач. 201

2.10.1. Определение вещества, взятого в избытке или недостатке. 201

2.10.2. Расчёты с использованием понятия «массовая доля вещества
в конечном растворе». 204

2.10.3. Смеси. 208

2.10.4. Растворимость. 212

2.10.5. Кристаллогидраты. 215

2.10.6. Частичное разложение. 218

2.10.7. Пластинка. 221

2.10.8. Электролиз. 223

2.10.9. Олеум. 228

2.10.10. Атомы. 229

Глава 3. Химия элементов. 235

3.1. Щелочные металлы. 235

3.2. Щелочноземельные металлы. 241

3.3. Магний. 246

3.4. Алюминий. 249

3.5. Цинк. 255

3.6. Железо. 258

3.7. Хром. 267

3.8. Медь. 274

3.9. Водород. 279

3.10. Кислород. 283

3.11. Углерод. 290

3.12. Кремний. 296

3.13. Азот. 301

3.14. Фосфор. 311

3.15. Сера. 319

3.16. Галогены. 329

Итоговый тест по неорганической химии. 340

Глава 4. Органическая химия. 349

4.1. Углеводороды. 351

4.1.1. Алканы. 351

4.1.2. Алкены. 364

4.1.3. Циклоалканы. 375

4.1.4. Циклоалкены. 379

4.1.5. Алкадиены. 382

4.1.6. Алкины. 388

4.1.7. Ароматические углеводороды (арены) 397

4.2. Кислородсодержащие органические соединения. 411

4.2.1. Спирты. 411

4.2.2. Фенолы. 424

4.2.3. Альдегиды и кетоны. 430

4.2.4. Карбоновые кислоты. 440

4.2.5. Сложные эфиры. 455

4.2.6. Жиры. 460

4.2.7. Углеводы. 462

4.3. Азотсодержащие органические соединения. 467

4.3.1. Амины. 467

4.3.2. Аминокислоты. Белки. 475

4.4. Методы решения расчётных задач. 481

4.4.1. Определение молекулярной формулы вещества по массовым долям элементов  481

4.4.2. Определение молекулярной формулы вещества по продуктам сгорания. 484

Итоговый тест по органической химии. 490

Глава 5. Методы познания в химии. Химия и жизнь. 503

5.1. Природные источники углеводородов. 503

5.2. Переработка нефти. 504

5.3. Переработка каменного угля. 506

5.4. Высокомолекулярные соединения. 506

5.5. Правила работы в лаборатории. 509

5.6. Лабораторная посуда и оборудование. 510

5.7. Методы разделения смесей и очистки веществ. 513

Итоговый тест по методам познания в химии. 513

Тренировочные варианты.. 517

Вариант 1. 517

Вариант 2. 526

Вариант 3. 535

Вариант 4. 544

Вариант 5. 553

Вариант 6. 563

Вариант 7. 572

Вариант 8. 581

Вариант 9. 589

Вариант 10. 599

Вариант 11. 608

Вариант 12. 617

Вариант 13. 626

Вариант 14. 635

Вариант 15. 644

Ответы.. 653

Приложения. 733

Приложение 1. Периодическая система химических элементов Д. И. Менделеева. 735

Приложение 2. Растворимость кислот, солей и оснований в воде. 736

Приложение 3. Тривиальные названия неорганических веществ. 737

Приложение 4. Основные каталитические реакции и используемые
в них катализаторы.. 740

Приложение 5. Цвета осадков и растворов неорганических соединений. 742

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

Шемерянкина Виктория Алексеевна

Шемерянкина Виктория Алексеевна, преподаватель химии, выпускник РГУ нефти и газа (НИУ) имени И.М. Губкина. Ведущий преподаватель курсов подготовки к ЕГЭ по химии. Победитель Всероссийских школьных олимпиад по химии и профильных студенческих олимпиад, 100-балльник ЕГЭ по химии.

Шамсутдинов Эмиль Рустемович

Шамсутдинов Эмиль Рустемович, преподаватель химии и математики, сотрудник НИИ «НК Роснефть», выпускник РГУ нефти и газа (НИУ) имени И.М. Губкина. Победитель Всероссийских школьных олимпиад по химии и профильных студенческих олимпиад.

Стоколос Ольга Анатольевна

Стоколос Ольга Анатольевна, кандидат технических наук, доцент кафедры органической химии и химии нефти РГУ нефти и газа (НИУ) имени И.М. Губкина. Эксперт ЕГЭ по химии, преподаватель курсов по подготовке к ЕГЭ по химии в университете. Автор более 50 публикаций: статьей, тезисов, учебных пособий.

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

Новинка: Алгоритмический тренинг. Решения практических задач на Python и С++

Алгоритмический тренинг. Решения практических задач на Python и С++

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

Алгоритмы и структуры данных — основа профессиональной подготовки программиста. В библиотеке профессионала найдутся многотомные неустаревающие труды по этой теме. Но, чтобы выйти за рамки академической Computer Science и перейти к реальной практике, алгоритмы нужно быстро подбирать и применять. Автор этой книги работал над ней более 10 лет, опираясь на свой богатый опыт олимпиадного и спортивного программирования.

В книге собраны варианты реализации и применения важнейших алгоритмов в условиях быстрого принятия решений — что незаменимо на собеседованиях и конференциях. Также книга может быть полезна для подготовки к экзаменам, олимпиадам и соревнованиям по программированию. Но в большей степени она позиционируется как настольная книга для начинающих программистов, желающих быстро и интересно приобрести качественную алгоритмическую подготовку — и претендовать на достойное предложение о работе. Реализации всех алгоритмов даны на двух языках — Python и С++.

Книгу “Алгоритмический тренинг. Решения практических задач на Python и С++” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Введение. 9

Глава 1. Для кого эта книга. 10

Глава 2. Чему обучит эта книга. 11

Глава 3. Спортивное и промышленное программирование. 12

Глава 4. Как пользоваться книгой. 14

Ступень I. Разминка. 15

Глава 5. Вводные задачи. 16

5.1. A+B. 16

5.2. Пример решения задачи. Числа Фибоначчи. 17

5.3. Пример решения задачи. Манхэттенское расстояние. 18

5.4. Пример решения задачи. Путь до ксерокса. 20

5.5. Пример решения задачи. Проверка перестановки. 22

5.6. Пример решения задачи. Циклы перестановки. 23

Глава 6. Разминочные конструктивные задачи. 25

6.1. Пример решения задачи. Пара с минимальным произведением. 25

6.2. Пример решения задачи. Тайная жизнь деревьев. 27

6.3. Пример решения задачи. Подписывание открыток. 28

6.4. Пример решения задачи. Исправление перестановки. 30

6.5. Пример решения задачи. Минимальный палиндром. 33

6.6. Пример решения задачи. Исключающее ИЛИ от 1 до n. 34

6.7. Пример решения задачи. Врачи и посетители. 37

6.8. Пример решения задачи. Минимизация перепадов. 40

6.9. Пример решения задачи. Одномерный геометрический центр. 42

Глава 7. Разминочные реализационные задачи. 45

7.1. Пример решения задачи. Морской бой. 45

7.2. Пример решения задачи. Стоимость интернет-связи. 47

7.3. Пример решения задачи. Пересечение двух прямоугольников. 50

7.4. Пример решения задачи. Проверка скобочной последовательности. 52

7.5. Пример решения задачи. Проверка скобочной последовательности
с двумя типами. 54

7.6. Пример решения задачи. Зеркальный лабиринт. 55

7.6. Пример решения задачи. Троичная сбалансированная система счисления. 58

Глава 8. Задачи для самостоятельного решения. 60

8.1. Примеры задач. 60

8.2. Задачи в онлайн-системах. 63

Итоги ступени I 64

Ступень II. Базовые алгоритмы.. 65

Глава 9. Оценка скорости работы алгоритмов. 66

9.1. Эмпирическая скорость процессора. 66

9.2. Асимптотическая оценка. Основы. 68

9.3. Практическая применимость асимптотических оценок. 75

9.4. Библиотечные реализации алгоритмов и их скорость. 76

Глава 10. Наибольший общий делитель. Алгоритм Евклида. 80

10.1. Постановка задачи. 80

10.2. Тривиальный алгоритм. 80

10.3. Алгоритм Евклида. 80

10.4. Доказательство алгоритма Евклида. 81

10.5. Реализация алгоритма Евклида. 81

10.6. Время работы алгоритма Евклида. 83

10.7. Пример решения задачи. Сокращение дроби. 84

10.8. Пример решения задачи. Наименьшее общее кратное. 84

10.9. Пример решения задачи. НОД нескольких чисел. 86

10.10. Пример решения задачи. Увеличение НОД массива. 87

10.11. Упражнения для самостоятельного решения. 88

Глава 11. Простые задачи на учет асимптотики. 91

11.1. Пример решения задачи. Префиксы перестановки. 91

11.2. Пример решения задачи. Парковочные места. 92

Глава 12. Объединение одномерных отрезков. 95

12.1. Постановка задачи. 95

12.2. Алгоритм объединения отрезков. 95

12.3. Реализация алгоритма объединения отрезков. 95

12.4. Пример решения задачи. Часы приема. 96

12.5. Пример решения задачи. Стрельба по отрезкам. 97

12.6. Пример решения задачи. Многослойная покраска. 99

Глава 13. Метод двух указателей. 102

13.1. Пример решения задачи. Пары фиксированной суммы. 102

13.2. Пример решения задачи. Длиннейший подотрезок без повторов. 104

13.3. Пример решения задачи. Подотрезки со всеми числами. 105

13.4. Пример решения задачи. Трехцветный забор. 107

Глава 14. Двоичный поиск. 110

14.1. Базовая задача: поиск в упорядоченном массиве. 110

14.2. Алгоритм двоичного поиска. 110

14.3. Реализация алгоритма двоичного поиска. 111

14.4. Библиотечные реализации. 112

14.5. Пример решения задачи. Подсчет меньших чисел. 112

14.6. Пример решения задачи. Грузовой лифт в отеле. 114

14.7. Пример решения задачи. Дисплеи для смартфонов. 116

14.8. Пример решения задачи. Прыжки лягушки. 118

14.9. Пример решения задачи. Корень уравнения. 120

14.10. Прочие применения двоичного поиска. 123

Глава 15. Проверка на простоту и факторизация. 124

15.1. Определения. 124

15.2. Общие сведения о простых числах и о факторизации. 124

15.3. Проверка числа на простоту. Базовый алгоритм. 125

15.4. Факторизация числа. Базовый алгоритм. 126

15.5. Пример решения задачи. Подсчет числа делителей. 127

15.6. Пример решения задачи. Иррациональный портной. 128

15.7. Пример решения задачи. Произведения-квадраты. 131

15.8. Пример решения задачи. Запросы числа делителей. 133

Глава 16. Динамическое программирование. Основы.. 136

16.1. Пример решения задачи. Сумма однообразных чисел. 136

16.2. Пример решения задачи. Наидлиннейшая возрастающая подпоследовательность. 138

16.3. Пример решения задачи. Подмножество с заданной суммой. 140

16.4. Пример решения задачи. Минимальное подмножество с заданной суммой. 143

16.5. Пример решения задачи. Получение суммы монетами заданных номиналов. 145

16.6. Пример решения задачи. Задача о рюкзаке. 146

16.7. Пример решения задачи. Кладоискатель. 148

16.8. Пример решения задачи. Путь в матрице. 151

16.9. Пример решения задачи. Расстояние редактирования. 153

Глава 17. Задачи для самостоятельного решения. 156

17.1. Примеры задач. 156

17.2. Задачи в онлайн-системах. 161

Итоги ступени II 163

Ступень III. Расширение базового арсенала. 163

Глава 18. Техники предварительного подсчета на массивах. 164

18.1. Указатели до ближайших элементов. 164

18.2. Частичные суммы. 165

18.3. Указатели до ближайших меньших элементов. 166

18.4. Списки позиций. 167

18.5. Сжатие значений. 168

18.6. Пример решения задачи. Поиск начала слова. 168

18.7. Пример решения задачи. Два подотрезка заданной длины с максимальной суммой. 170

18.8. Пример решения задачи. Подсчет чисел в подотрезках. 172

18.9. Пример решения задачи. Подотрезок с максимальной суммой. 175

18.10. Пример решения задачи. Проекционная реклама. 180

18.11. Пример решения задачи. Подотрезок с максимальным средним
арифметическим. 182

18.12. Пример решения задачи. Сумма в прямоугольнике. 186

Глава 19. Графы. Обход в глубину. 190

19.1. Что такое граф. 190

19.2. Ориентированные и неориентированные графы. 191

19.3. Способы представления графов в компьютере. 191

19.4. Алгоритм обхода в глубину. 198

19.5. Реализация обхода в глубину. 199

19.6. Пример решения задачи. Проверка наличия пути. 202

19.7. Пример решения задачи. Конная прогулка. 204

19.8. Пример решения задачи. Проверка связности. 207

19.9. Пример решения задачи. Проверка двудольного графа. 209

19.10. Пример решения задачи. Проверка орграфа на ацикличность. 213

19.11. Пример решения задачи. Топологическая сортировка. 218

19.12. Пример решения задачи. Диаметр дерева  221

Глава 20. Графы. Обход в ширину. 223

20.1. Алгоритм обхода в ширину. 223

20.2. Свойства обхода в ширину. 224

20.3. Реализация обхода в ширину. 225

20.4. Пример решения задачи. Кластер компьютеров. 228

20.5. Пример решения задачи. Робот в лабиринте. 230

20.6. Пример решения задачи. Наводнение. 234

Глава 21. Решето Эратосфена. 236

21.1. Алгоритм решета Эратосфена. 236

21.2. Демонстрация работы алгоритма. 236

21.3. Доказательство корректности решета Эратосфена. 237

21.4. Время работы решета Эратосфена. 237

21.5. Базовые оптимизации решета Эратосфена. 238

21.6. Реализация решета Эратосфена. 239

21.7. Дальнейшие оптимизации решета Эратосфена. 240

21.8. Пример решения задачи. Подсчет простых чисел в отрезке. 243

Глава 22. Двоичное возведение в степень. 246

22.1. Ключевая идея. 246

22.2. Алгоритм двоичного возведения в степень. 247

22.3. Иллюстрация работы алгоритма. 247

22.4. Время работы двоичного возведения в степень. 248

22.5. Реализация двоичного возведения в степень. 248

22.6. Пример решения задачи. Последние цифры степени. 249

22.7. Пример решения задачи. Обратное по простому модулю. Малая теорема Ферма. 251

22.8. Пример решения задачи. Быстрое вычисление чисел Фибоначчи.
Двоичное возведение матриц в степень. 252

22.9. Пример решения задачи. Физический движок. 255

22.10. Пример решения задачи. Подсчет путей фиксированной длины. 261

Глава 23. Структуры данных. Дерево отрезков. 265

23.1. Базовый вариант. Дерево для минимумов. 265

23.2. Дерево отрезков для максимумов. 272

23.3. Дерево отрезков с запросами модификации. 273

23.4. Дерево отрезков для сумм. 274

23.5. Прочие виды операций в дереве отрезков. 274

23.6. Запросы обновления на отрезке. 275

23.7. Дальнейшие обобщения дерева отрезков. 279

23.8. Пример решения задачи. Наидлиннейшая возрастающая
подпоследовательность (быстрый вариант) 280

23.9. Пример решения задачи. Наименьший общий предок. 281

Глава 24. Задачи для самостоятельного решения. 284

24.1. Примеры задач. 284

24.2. Задачи в онлайн-системах. 288

Ступень IV. Разносторонняя подготовка. 291

Глава 25. Производительность ввода-вывода. 292

25.1. Производительность ввода-вывода в Python. 292

25.2. Производительность ввода-вывода в C++. 294

Глава 26. Графы. Алгоритм Дейкстры.. 298

26.1. Постановка задачи поиска кратчайших путей. 298

26.2. Пример. 298

26.3. Алгоритм Дейкстры. 299

26.4. Ограничения алгоритма Дейкстры. 300

26.5. Пример работы алгоритма Дейкстры. 300

26.6. Восстановление кратчайшего пути. 302

26.7. Доказательство алгоритма Дейкстры. 303

26.8. Квадратичная реализация алгоритма Дейкстры. 304

26.9. Алгоритм Дейкстры для разреженных графов. 308

26.10. Пример решения задачи. Оптимальный путь четной длины. 312

26.11. Пример решения задачи. Ребра кратчайших путей. 315

Глава 27. Графы. Компоненты сильной связности. 318

27.1. Определения. 318

27.2. Алгоритм поиска компонент сильной связности. 320

27.3. Доказательство алгоритма. 320

27.4. Демонстрация работы алгоритма. 323

27.5. Временная сложность алгоритма. 324

27.6. Реализация алгоритма. 324

27.7. Дополнительные свойства алгоритма. 327

27.8. Пример решения задачи. Железнодорожный вокзал. 327

27.9. Пример решения задачи. Задача умозаключенного. 328

27.10. Пример решения задачи. Сбор дани. 329

Глава 28. Работа с вещественными числами. 335

28.1. Формат чисел с плавающей запятой. 335

28.2. Проблемы чисел с плавающей запятой. 337

28.3. Приемы работы с числами с плавающей запятой. 342

Глава 29. Геометрия на плоскости. Основы.. 346

29.1. Расстояние между точками. 346

29.2. Косое произведение векторов. 347

29.3. Скалярное произведение векторов. 348

29.4. Площадь треугольника. 349

29.5. Направление поворота. Ориентированная площадь треугольника. 350

29.6. Площадь многоугольника. 351

29.7. Проверка точки на принадлежность прямой. 353

29.8. Проверка точки на принадлежность отрезку. 353

29.9. Проверка двух отрезков на пересечение. 355

29.10. Расстояние от точки до прямой. 358

29.11. Расстояние от точки до отрезка. 359

29.12. Точка пересечения двух прямых. 362

29.13. Точка пересечения двух отрезков. 365

29.14. Матрица поворота. 368

29.15. Пример решения задачи. Проверка окружностей на пересечение. 369

29.16. Пример решения задачи. Пересечение окружности и прямой. 371

29.17. Пример решения задачи. Сортировка точек по углу. 375

Глава 30. Расширенный алгоритм Евклида. 380

30.1. Алгоритм. 380

30.2. Доказательство. 380

30.3. Реализация расширенного алгоритма Евклида. 381

30.4. Пример решения задачи. Прыжки вперед и назад. 382

30.5. Пример решения задачи. Линейное диофантово уравнение с двумя переменными. 384

30.6. Пример решения задачи. Обратное по составному модулю.. 386

Глава 31. Задачи для самостоятельного решения. 389

31.1. Примеры задач. 389

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

Методики решения задач. 396

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

Послесловие. 398

Приложение. Решения задач. 399

Задачи из главы 8. 399

Задачи из главы 10. 401

Задачи из главы 17. 402

Задачи из главы 24. 406

Задачи из главы 31. 411

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

Максим-Иванов

Максим Иванов профессионально занимается системным программированием, долгое время увлекается изучением Windows API, подробно исследовал ядро Windows. Несколько лет участвовал в олимпиадах по программированию, серебряный призёр чемпионата мира 2011 г. в составе команды Саратовского государственного университета. Автор сайта об алгоритмах https://e-maxx.ru, на основе которого написана эта книга.