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

«Паяем правильно и точно»: 12 отличий, которые делают этот набор лучшим подарком юному инженеру

Паяем правильно и точно. Лучший новогодний подарок

Введение

Выбираете набор по электронике для ребёнка и теряетесь среди десятков похожих коробок? Многие из них обещают «увлекательные опыты» и «развитие навыков», но на деле оказываются просто коллекцией разрозненных деталей без системы и цели.

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

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

1. Не просто коробка с деталями, а полноценный обучающий курс.

Вам не придётся ничего искать и придумывать. Всё уже продумано за вас: от подробного руководства, составленного по авторской методике, до видеоуроков, где каждый шаг показан наглядно.

1. Не просто коробка с деталями, а полноценный обучающий курс.

2. Методика, проверенная на практике, а не в маркетинговом отделе.

Концепция и состав набора апробированы и отточены за 7 лет на реальных занятиях с подростками от 12 лет в классе «Основы электроники». Вы получаете не теорию, а работающую образовательную программу.

2. Методика, проверенная на практике, а не в маркетинговом отделе.

3. Сразу 4 готовых проекта, а не разрозненные компоненты.

После обучения вы не останетесь с кучей непонятных деталей. Вы соберёте 4 работающих устройства («Бегущий огонек», светильники, новогодняя семицветная 3D-ёлочка), каждое — со своей схемой, инструкцией и пошаговым видеоразбором.

3. Сразу 4 готовых проекта, а не разрозненные компоненты. 

4. Профессиональная «третья рука» с лупой и подсветкой.

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

1. Не просто коробка с деталями, а полноценный обучающий курс.

5. Основа для роста: “пистонированная” плата и запас компонентов.

В отличие от многих наборов «на один раз», мы даём качественная макетную плату из стеклотекстолита FR-4 с металлизированными сквозными отверстиями, которая не трескается и не расслаивается при пайке. А также запас элементов (резисторы, конденсаторы, транзисторы, микросхемы) для экспериментов и сборки ваших собственных проектов после освоения базового курса.

1. Не просто коробка с деталями, а полноценный обучающий курс.

6. Профессиональные инструменты в комплекте — не экономим на качестве

В набор входят не просто детали, а полноценные инструменты для работы:

  • Бокорезы — для аккуратной обрезки выводов компонентов
  • Пинцет —  не только для монтажа, но и для исправления погнутых ножек микросхем и формирования правильной геометрии выводов компонентов.
  • Оловоотсос — для исправления ошибок (демонтажа припоя)

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

1. Не просто коробка с деталями, а полноценный обучающий курс.

7. Порядок с первого дня: удобный органайзер-книжка.

Все инструменты и расходники имеют своё место. С ним легко хранить набор дома и брать с собой. Это приучает к аккуратности и дисциплине с самого начала.

1. Не просто коробка с деталями, а полноценный обучающий курс.

8. Поддержка российского производителя и педагога.

Набор собран в России по разработке отечественного специалиста, что гарантирует соответствие образовательным стандартам и доступность комплектующих.

1. Не просто коробка с деталями, а полноценный обучающий курс.

9. Безопасность — это не опция, а наша обязанность.

В основе набора — безопасность и качество:

  • Щадящий флюс ЛТИ-120: Российского производства, не содержит агрессивных кислот, не требует смывания спиртом и не вызывает коррозии плат.
  • Безопасный припой ПОС-60: Имеет пониженную температуру плавления (всего 180°C), что минимизирует выделение вредных испарений и снижает риск ожогов по сравнению с обычными припоями.
  • Защитные очки в комплекте: Сразу приучаем к правильной и безопасной работе.

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

1. Не просто коробка с деталями, а полноценный обучающий курс.

10. Полная комплектация — ничего докупать не нужно.

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

1. Не просто коробка с деталями, а полноценный обучающий курс.

11. Навык, а не игрушка: профессиональный паяльник с регулировкой температуры.

В набор входит не дешёвая «удочка», а добротный паяльник, который станет вашим верным помощником не только на время обучения, но и в будущих проектах.

11. Навык, а не игрушка: профессиональный паяльник с регулировкой температуры.

 

12. Подарок, который захочется получить.

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

12. Подарок, который захочется получить.

Заключение

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

 

Выбирая наш набор, вы покупаете не просто паяльник и микросхемы. Вы покупаете:

 

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

 

Правильно, потому что по правилам. Точно потому что достигните цели!

#набор_для_пайки #паяльный_набор #электроника_для_детей #электронный_конструктор #пайка_для_начинающих #робототехника_для_детей #подарок_подростку #подарок_мальчику #подарок_девочке #подарок_на_день_рождения #подарок_школьнику #обучение_пайке #набор_с_видеоуроками #паяем_правильно #кружок_электроники #опыты_с_электричеством #своими_руками #DIY #образование #техника

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

Встречайте: “Программирование с помощью искусственного интеллекта”

Программирование с помощью искусственного интеллекта

Книга посвящена практике использования инструментов искусственного интеллекта  для всех этапов создания кода: от разработки требований и планирования до проектирования, написания, отладки и тестирования. Предложена методология модульного программирования, которая эффективно сочетается с подходом генерации кода с применением ИИ. Рассмотрены  основные возможности и сценарии использования инструментов ИИ для разработки, оценены плюсы и минусы популярных систем. Показаны перспективы применения универсальных языковых моделей (LLM), таких как ChatGPT, Gemini, Claude и других, для решения задач программирования. Также рассмотрено применение широкого спектра специализированных систем (GitHub Copilot, Tabnine, Cursor, Amazon CodeWhisperer). Освещены вопросы инженерии промптов, автоматизации рутинных задач, таких как создание регулярных выражений, применения низкокодового и бескодового программирования и др.

Для широкого круга разработчиков

 

Примеры кода можно скачать тут: https://github.com/ttaulli/AI-Assisted-Programming-Book

Получите практические советы, как использовать инструменты искусственного интеллекта для всех этапов создания кода: от разработки требований и планирования до проектирования, написания, отладки и тестирования.  Начинающие и опытные разработчики узнают, как применять широкий спектр инструментов ИИ— от универсальных языковых моделей (ChatGPT, Gemini, Claude) до специализированных систем (GitHub Copilot, Tabnine, Cursor, Amazon CodeWhisperer).

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

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

В этой книге:

  • Основные возможности ИИ-инструментов для разработки
  • Плюсы, минусы и сценарии использования популярных систем, включая GitHub Copilot
  • Применение универсальных языковых моделей (LLM), таких как ChatGPT, Gemini, Claude и других, для решения задач программирования
  • Использование ИИ-инструментов в жизненном цикле разработки ПО: от разработки требований до тестирования
  • Инженерия промптов для разработки
  • Автоматизация рутинных задач, таких как создание регулярных выражений, с помощью ИИ
  • Низкокодовые и бескодовые инструменты на основе ИИ
Tom Taulli

Том Таулли занимается разработкой программного обеспечения с 1980-х годов. Еще в колледже основал свою первую компанию, которая сосредоточилась на разработке систем электронного обучения. Ведет авторские колонки для популярных онлайн-изданий, таких как BusinessWeek.com, TechWeb.com и Bloomberg.com. Автор статей об искусственном интеллекте для Forbes.com и является консультантом различных компаний в этой сфере. Ведет  веб-сайт Taulli.com.

Книгу “Программирование с помощью искусственного интеллекта” можно купить в нашем интенет-магазине.

Высокая оценка книги
«Программирование с помощью искусственного интеллекта». 9

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

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

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

В чем отличие этой книги. 15

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

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

Примеры использования кода. 16

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

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

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

Глава 1. Новый мир для разработчиков. 19

Эволюция и революция. 20

Генеративный искусственный интеллект. 23

Преимущества. 24

Минимизация поиска. 24

Ваш консультант. 26

Интеграция с IDE.. 27

Рефлексия вашей кодовой базы.. 28

Целостность кода. 29

Генератор документации на платформе искусственного интеллекта. 30

Модернизация. 30

Недостатки. 34

Галлюцинации. 34

Интеллектуальная собственность. 35

Конфиденциальность. 36

Безопасность. 36

Данные для обучения. 37

Предвзятость. 38

Новый путь для разработчиков. 38

Карьера. 39

Разработчик 10x?. 40

Профессиональные навыки разработчика. 40

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

Глава 2. Как работает технология программирования с использованием искусственного интеллекта  43

Основные функции. 43

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

Компиляторы по сравнению с инструментами программирования на основе искусственного интеллекта  45

Уровни возможностей. 47

Генеративный искусственный интеллект и большие языковые модели (LLM) 49

Эволюция. 49

Модель трансформера. 51

OpenAI Playground. 54

Токены.. 55

Использование платформы.. 56

Оценка больших языковых моделей. 60

Типы больших языковых моделей. 63

Выбор ИИ-инструментов программирования. 66

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

Глава 3. Оперативное проектирование. 69

Наука и искусство. 70

Проблемы.. 70

Промпт. 71

Контекст. 72

Инструкции. 72

Суммаризация. 73

Классификация текста. 74

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

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

Ввод содержимого. 77

Формат. 77

Передовой опыт. 79

Будьте конкретны.. 79

Сокращения и технические термины.. 80

Техники обучения с примерами и без. 80

Ключевые слова. 81

Методика промптов по цепочке размышлений (CoT) 82

Наводящие вопросы.. 83

Промпт на примеры и аналогии. 83

Снижение галлюцинаций. 84

Безопасность и конфиденциальность. 85

Автономные агенты искусственного интеллекта. 86

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

Глава 4. Github Copilot 91

GitHub Copilot 91

Цены и версии. 92

Пример использования: программирование аппаратных средств. 93

Пример использования: Shopify. 94

Пример использования: Accenture. 96

Безопасность. 96

Приступая к работе. 97

Среда Codespaces и Visual Studio Code. 98

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

Комментарии. 102

Чат. 102

Внутренний чат. 107

Открытые вкладки. 108

Интерфейс командной строки. 109

Партнерская программа Copilot 110

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

Глава 5. Остальные инструменты программирования на основе
искусственного интеллекта. 113

CodeWhisperer от Amazon. 113

Duet AI от Google для разработчиков. 115

Tabnine. 117

Replit 118

CodeGPT.. 121

Cody  122

CodeWP. 124

Warp  125

Bito AI. 127

Cursor 128

Code Llama. 130

Остальные модели с открытым исходным кодом.. 131

StableCode. 131

AlphaCode. 132

PolyCoder 132

CodeT5. 132

Компании, производящие корпоративное программное обеспечение. 133

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

Глава 6. ChatGPT и другие большие языковые модели общего назначения. 135

ChatGPT.. 135

GPT-4. 136

Навигация по ChatGPT.. 137

Мобильное приложение. 140

Пользовательские запросы.. 141

Просмотр с помощью Bing. 141

Утомительные задачи. 145

Регулярные выражения. 146

Стартовый код. 147

GitHub README.. 148

Кросс-браузерная совместимость. 149

Команды Bash. 150

GitHub Actions. 150

Плагины.. 151

Плагин Codecademy. 152

Плагин AskYourDatabase. 153

Плагин Recombinant AI. 154

GPTs  154

Gemini 156

Приложения. 158

Программирование в Gemini 159

Claude. 161

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

Глава 7. Идеи, планирование и требования. 165

Мозговой штурм.. 165

Исследование рынка. 167

Тенденции развития рынка. 170

Общий адресный рынок. 171

Конкуренция. 172

Требования. 174

Документ с требованиями к продукту. 175

Спецификация требований к программному обеспечению.. 176

Интервью.. 177

Белая доска. 178

Стиль. 180

Подходы к планированию проекта. 181

Разработка через тестирование. 183

Разработка веб-дизайна. 185

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

Глава 8. Программирование. 189

Что в реальности?. 189

Мотивы, помогающие принять решение. 191

Обучение. 191

Комментарии. 193

Модульное программирование. 194

Начало работы над проектом.. 195

Автозаполнение. 196

Рефакторинг. 198

Ninja Code. 198

Метод извлечения. 199

Разделение условий. 200

Переименование. 200

Мертвый код. 201

Функции. 202

Объектно-ориентированное программирование. 204

Фреймворки и библиотеки. 205

Данные. 206

Разработка фронтенда. 208

Каскадные таблицы стилей CSS. 209

Создание графики. 210

Инструменты на основе искусственного интеллекта. 211

API-интерфейсы.. 213

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

Глава 9. Отладка, тестирование и развертывание. 215

Отладка. 215

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

Код-ревью.. 218

Модульные тесты.. 219

Запросы на извлечение. 222

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

Обратная связь с пользователями. 225

Запуск. 227

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

Глава 10. Выводы.. 229

Интенсивный процесс обучения. 229

Основные преимущества. 229

Но есть и недостатки. 230

Оперативное проектирование —  это не только искусство, но и наука. 231

За гранью программирования. 232

Искусственный интеллект не заменит вас на работе. 232

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

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

Об авторе. 238

Об изображении на обложке. 239

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

Вышла книга: “Инжиниринг платформ: техническое и управленческое руководство”

Инжиниринг платформ

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

Для специалистов DevOps, системных администраторов, руководителей команд

Инжиниринг платформ — это командная игра. Перед вами правила игры.

Келси Хайтауэр, заслуженный инженер Google, соавтор книги «Kubernetes: Up & Running» (O’Reilly)

Техническое и управленческое руководство

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

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

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

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

Книга поможет:

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

Иэн Ноуленд — ветеран индустрии программного обеспечения с 25-летним стажем, занимавший пост старшего вице-президента в компании Datadog. С 2008 по 2016 год работал в компании AWS, где руководил проектами Amazon EMR и EC2 Nitro. В настоящее время является соучредителем стартапа.

 

 

Camille Fournier

Фурнье Камиль занимала должность руководителя в компаниях от зарождающихся стартапов до корпораций из рейтинга Fortune 50. Была в числе основателей Комитета по техническому надзору CNCF, в настоящее время входит в совет директоров журнала ACM Queue. Автор книги «The Manager’s Path» издательства O’Reilly.

Книгу “Инжиниринг платформ: техническое и управленческое руководство” можно купить в нашем интенет-магазине.

Отзывы на книгу “Инжиниринг платформ”. 13

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

Введение. 17

От Камиль Фурнье. 17

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

Как читать эту книгу. 19

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

Наши контакты.. 20

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

От Камиль. 21

От Иэна. 21

От нас обоих. 22

ЧАСТЬ I. Что такое инжиниринг платформ и для чего он нужен. 23

Глава 1. Почему инжиниринг платформ приобретает такую важность. 25

Определение платформы и другие важные термины.. 26

Наше общее болото. 27

Как мы увязли в этом болоте. 30

Изменение № 1. Расширение возможностей выбора. 30

Изменение № 2. Более высокие операционные потребности. 33

Результат: вы тонете в болоте. 35

Как разработка платформ помогает выбраться из болота. 36

Ограничение использования примитивов при минимизации накладных расходов  36

Сокращение количества клея для каждого приложения. 37

Централизация затрат на миграцию.. 39

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

Позвольте командам сосредоточиться на создании платформ.. 41

Резюме. 44

Глава 2. Основы инжиниринга платформ.. 45

Кураторский подход к продукту. 46

Разработка абстракций на основе программного обеспечения. 48

Основные абстракции: платформенный сервис и его API-интерфейсы.. 49

“Толстые” клиенты.. 50

Настройки OSS. 51

Интеграция реестров метаданных. 52

Обслуживание широкого круга разработчиков приложений. 54

Платформа в качестве фундамента. 56

Ответственность за всю платформу. 57

Поддержка платформы.. 58

Операционная дисциплина. 59

Резюме. 61

ЧАСТЬ II. Практика инжиниринга платформ.. 63

Глава 3. Как и когда начинать. 69

Содействие сотрудничеству при создании платформ на ранних стадиях. 69

Создание платформенных команд, которые заменят сотрудничество. 76

Соответствуют ли преимущества централизации владения понесенным затратам?  77

Осознайте, что коллективная динамика исчезла. 78

Сосредоточьтесь на решении проблем, а не на новых технологиях или архитектуре  79

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

Не спешите нанимать менеджеров по продуктам (и избегайте менеджеров проектов) 80

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

Трансформация традиционной инфраструктуры организации. 84

Вся ваша инженерная культура должна измениться. 84

Определите наиболее перспективные направления в начале работы.. 85

Осознайте, что вы не можете просто нанять менеджеров по продуктам,
чтобы покончить с этим делом.. 86

Измените способ поддержки своих продуктов. 86

Обновите свой процесс собеседования. 86

Обновите свои системы признания и вознаграждения. 87

Не нужно нанимать слишком много менеджеров проектов. 87

Согласитесь с тем, что ваша команда будет тратить больше времени
на общение с клиентами и меньше — на написание кода. 88

Проведите необходимую реструктуризацию.. 88

И пусть это будет весело! 89

Резюме. 89

Глава 4. Создание отличных платформенных команд. 91

Риски, связанные с командами, работающими с платформами. 92

Слишком много внимания уделяется системам.. 92

Слишком много внимания уделяется разработке. 94

Различные роли платформенных инженеров. 95

Инженеры-программисты.. 96

Системные инженеры.. 98

Инженеры по надежности. 99

Специалисты по системам.. 100

Подбор и утверждение инженеров на все должности. 101

Разрешите специфические названия должностей. 103

Избегайте создания новой матрицы уровней инженеров-программистов. 103

Используйте, по возможности, одноуровневую матрицу для системных
ролей. 104

При необходимости создайте новый процесс собеседования при найме инженеров-программистов  105

Для разных системных ролей интервью не должно сильно меняться. 107

Интервью для выявления эмпатии к клиентам.. 108

Из кого получаются инженеры-менеджеры по разработке отличных
платформ?. 109

Опыт работы с платформами. 109

Опыт работы в крупных долгосрочных проектах. 110

Внимание к деталям.. 111

Другие роли в команде разработчиков платформы.. 111

Менеджеры по продуктам.. 111

Владельцы продуктов. 113

Менеджеры проектов / технические менеджеры программ.. 113

Девелопер-адвокаты, технические писатели и инженеры службы поддержки. 114

Формирование культуры команды разработчиков платформы.. 115

Разделение ответственности между командой разработчиков
и командой SRE. 115

Сильные и слабые стороны команды разработчиков. 115

Объединение команд и добавление управления продуктами. 116

Внедрение культуры разработки платформ.. 117

Резюме. 118

Глава 5. Платформа как продукт. 119

Культура продукта, ориентированная на потребителя. 120

Характеристики внутренних клиентов. 121

Взаимодействие с внутренними клиентами. 123

Эмпатия к клиентам.. 125

Как избежать ловушки магазина функций, чтобы обеспечить более широкое обслуживание клиентов  128

Поиск новых продуктов и анализ рынка. 130

Определение потенциальных платформенных продуктов. 131

Развитие существующих предложений: сглаживание граней или переосмысление проблемы   134

Маркетинговые исследования: обоснование новых инвестиций. 136

Метрики продукта. 141

Успешная реализация продукта: составление дорожной карты.. 146

Видение. Долгосрочное. 147

Стратегия. Среднесрочная перспектива. 147

Цели и метрики. Планы на год. 148

Контрольные точки. Ежеквартально. 148

Спецификация функций. 149

Практика делает всё более совершенным.. 149

Типы сбоев в разработке продукта. 151

Недооценка стоимости миграции. 152

Завышение бюджета на изменения в работе пользователей. 152

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

Слишком много менеджеров по продуктам для инженерной команды.. 154

Ситуация, когда менеджеры по продуктам выполняют работу,
которую должен делать инженерный менеджмент. 154

Резюме. 155

Глава 6. Эксплуатация платформ.. 157

Практика работы по вызову. 158

Почему важно обслуживание по вызову в режиме 24´7. 159

Зачем объединять DevOps?. 159

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

Методы поддержки. 164

Почему инженеры-разработчики платформы должны выполнять работу
по поддержке. 165

Этап 1. Формализуйте уровни поддержки. 166

Этап 2. Отделите некритическую поддержку от поддержки по вызову. 168

Этап 3. Наймите специалиста по поддержке. 169

Этап 4. Масштабирование с помощью организации технической
поддержки. 171

Практика оперативной обратной связи. 173

SLO и SLA необходимы. Бюджеты ошибок не обязательны.. 174

Управление изменениями. 176

Синтетический мониторинг. 178

Операционные обзоры.. 180

Резюме. 182

Глава 7. Планирование и поставка. 183

Планирование долгосрочных проектов. 184

Уточнение целей и требований в документе-предложении. 184

Переход от предложения к плану действий. 186

Не затягивайте работу. 188

Планирование дорожной карты “снизу вверх”. 192

Работа по принципу “Не выключай свет” (KTLO) 193

Приказы.. 194

Усовершенствования системы.. 195

Повышение эффективности и производительности. 197

Повышение безопасности и соответствия требованиям.. 199

Сводим всё это воедино. 200

Сообщайте о победах и трудностях раз в две недели. 204

Основы.. 205

Зачем? В чем ценность?. 205

Что? Cтруктурирование побед и трудностей. 206

Не забывайте о проблемах! 207

Научите свою команду писать о победах и трудностях. 208

Резюме. 210

Глава 8. Реорганизация платформ.. 213

Почему преобразование архитектуры предпочтительнее, чем создание
версии 2. 214

Разное инженерное мышление. 216

Архитектура определяет требования к типу мышления. 217

Почему сложно создавать платформы версии 2 и предпочтительнее
перестроить архитектуру. 219

Решение проблем безопасности с помощью архитектуры.. 222

Ограничения реорганизации архитектуры.. 228

Совместимость. 228

Тестирование. 228

Более низкие требования к средам.. 229

Транши, медленное внедрение и отставание в версии. 230

Планирование реорганизации архитектуры.. 230

Шаг 1. Масштабно продумайте конечные цели реорганизации
архитектуры.. 232

Шаг 2. Учитывайте затраты на миграцию.. 235

Шаг 3. Определите основные достижения за следующие 12 месяцев. 236

Шаг 4. Заручитесь поддержкой руководства и будьте готовы ждать. 237

Резюме. 238

Глава 9. Миграция и закат платформ.. 241

Антипаттерны миграции. 242

Инженерия упрощенной миграции. 243

Используйте абстракции продукта, которые сводят к минимуму
количество “клея” и ограничивают вариативность. 244

Создавайте архитектуру, предусматривающую прозрачную миграцию.. 245

Отслеживание метаданных об использовании. 247

Разрабатывайте автоматизацию, чтобы избежать использования
буферов обмена. 249

Документооборот для плавной миграции. 250

Координация плавных миграций. 252

Масштабируйте, ограничивайте и определяйте приоритетность запланированных изменений  252

Предоставляйте информацию заблаговременно и публично. 254

Пройдите последние 20 % пути. 255

Продуманное использование приказов. 256

Закат платформ.. 258

Принятие решения о прекращении использования (закате) платформы.. 258

Координация заката. 261

Не бойтесь сворачивать работу, когда в этом есть смысл. 262

Резюме. 262

Глава 10. Управление взаимоотношениями с заинтересованными сторонами  265

Составление карты заинтересованных сторон: матрица “власть-интерес”. 267

Общение с надлежащей прозрачностью.. 271

Остерегайтесь чрезмерного распространения деталей. 271

Разумно используйте регулярное общение в формате 1:1. 273

Следите за ожиданиями и обязательствами. 274

Расширяйте масштаб с помощью совместных совещаний и консультативных советов по работе с клиентами  275

Увеличивайте объем коммуникации в сложных ситуациях. 275

Поиск приемлемых компромиссов. 276

Четко представляйте последствия для бизнеса. 277

Иногда говорите “Да, но с компромиссами”. 278

Говорите “Нет”, не разрушая отношений. 279

Компромисс на теневых платформах. 282

Финансовые проблемы: управление затратами и бюджетом.. 285

Шаг 1. Определите, кто получит выгоду завтра. 286

Шаг 2. Распределите работу по группам (но не поручайте отдельным исполнителям) 287

Шаг 3. Предложите, что сократить, и выскажите твердое мнение о том,
что оставить. 288

Резюме. 289

ЧАСТЬ III. Как выглядит успех?. 291

Глава 11. Ваши платформы согласованы.. 293

Соответствие цели. 295

Приведение команд в соответствие с поставленной целью с помощью правильного подбора сотрудников  296

Приведение культуры в соответствие с целями и общепринятыми
методами работы.. 297

Приведение культуры в соответствие с целями при помощи
сотрудничества команд. 297

Согласование стратегии продукта. 298

Развивайте кросс-платформенное мышление с помощью независимого управления продуктами  298

Поддерживайте кросс-платформенную архитектуру с помощью независимых индивидуальных контрибьюторов. 299

Ищите обратную связь в комментариях к опросам клиентов платформы.. 300

Разумно устраняйте несогласованность с помощью реструктуризации. 301

Согласование планов. 302

Согласовывайте только крупные проекты, а не каждую деталь. 302

Будьте честны в борьбе с несогласованностью.. 303

Окончательное согласование зависит от принципиального лидерства. 304

Объединение усилий: приведение организации к согласованию.. 304

Резюме. 307

Глава 12. Вашим платформам доверяют. 309

Доверие к стилю вашей работы.. 311

Укрепляйте доверие, расширяя возможности опытных руководителей. 312

Оптимизируйте рост доверия, упорядочивая варианты использования. 313

Верьте в свои крупные инвестиции. 314

Заручитесь поддержкой технических заинтересованных сторон,
чтобы получить доверие к перестройке архитектуры.. 315

Для завоевания доверия к новым продуктам ищите спонсорскую
поддержку со стороны руководства. 315

Поддерживайте старые системы, чтобы сохранить доверие. 316

Завоевание доверия требует гибкости в отношении того, что является “правильным”  316

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

Создайте культуру скорости поставки. 318

Расставляйте приоритеты в проектах, чтобы высвободить потенциал команды   319

Оспаривайте предположения о сфере применения продукта. 320

Объединяем всё воедино: случай с перегруженной платформой. 322

Резюме. 324

Глава 13. Ваши платформы справляются со сложностями. 327

Управление случайной сложностью, связанной с координацией
действий людей. 330

Управление сложностью, связанной с теневыми платформами. 332

Управление сложностями, возникающими при неконтролируемом росте. 335

Управление сложностью с помощью поиска нового продукта. 337

Объединение усилий: баланс между внутренней и внешней сложностями. 338

Неудачи при использовании OSS. 339

Безуспешная попытка изменить правила игры.. 339

Теневые платформы вынуждают к перезагрузке. 340

Запуск после перезагрузки. 341

Резюме. 342

Глава 14. Ваши платформы любят. 343

Любовь работает. 346

Любовь может выглядеть как хитрость. 347

Любовь может быть очевидной. 349

Соединяем всё вместе: любовь делает ваших пользователей классными. 350

В заключение. Что такое любовь? Детка, не делай мне больно. 352

Заключительные замечания. 353

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

Об авторах. 366

Об изображении на обложке. 367

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

Новинка: “Современный C#. Разработка настольных, облачных, мобильных и веб-приложений”

Современный C#. Разработка настольных, облачных, мобильных и веб-приложений

Это новое издание фундаментальной книги Иэна Гриффитса по языку C# и платформе .NET на примере версий C# 12 и .NET 8. Книга  много лет остается настольными для .NET-разработчиков и является одним из наиболее подробных справочников по C# и .NET, учитывающим всевозможные нюансы программирования и поддержки приложений для платформ Microsoft. Рассмотрены новейшие возможности языка, особое внимание уделяется структуре языка C#, структурам данных, принципам объектно-ориентированного программирования. Отдельные главы посвящены работе с обобщенными типами, асинхронному выполнению кода, работе с памятью и разнообразным библиотекам классов, языку запросов LINQ.

Для специалистов по C# и .NET

Книга поможет вам:

  • Понять, как платформа .NET изменилась за последние годы и как это отражается на разработке приложений
  • Актуализировать информацию об объектно-ориентированном программировании на платформе .NET
  • Подбирать подходящие языковые возможности C# для решения любой задачи
  • Решать, когда лучше воспользоваться новыми возможностями, а когда придерживаться старых
  • Исследовать весь спектр функциональных возможностей применяемых в .NET библиотек классов
  • Использовать библиотеки классов для решения задач прикладного программирования
  • Разобраться с многочисленными небольшими нововведениями .NET, благодаря которым код становится гораздо выразительнее

Книга предсказуемо отличная.
Стивен Тауб, главный архитектор в компании Microsoft

В книге разобрано самое ядро языка — как раз тот материал, который необходим для создания хорошего ПО. Книга подробная, тщательно проработанная и затрагивает именно те языковые тонкости и нюансы, которым редко уделяется внимание в других книгах. Здесь всё, что нужно знать о C#.
Джереми Морган, программист, DevOps

Иэн Гриффитс

Иэн Гриффитс (Ian Griffiths) — признанный эксперт в мире информационных технологий, чье имя является синонимом глубокого понимания и мастерства в работе с платформой Microsoft.
Более 20 лет Иэн посвятил проектированию и разработке сложных программных систем, консультированию и обучению специалистов. Его карьера — это яркий путь от ведущего разработчика и архитектора до сооснователя и ключевого технического советника в endjin, британской консалтинговой компании, специализирующейся на передовых решениях в области данных, искусственного интеллекта и облачных технологий.
Иэн является не только практикующим профессионалом высочайшего класса, но и блестящим преподавателем и автором. Он обладает уникальным даром — разлагать самые сложные концепции на понятные и логичные составляющие. Это качество сделало его одним из самых востребованных инструкторов в знаменитой серии курсов O’Reilly, где его лекции по C# и платформе .NET считаются золотым стандартом.
Именно этот богатейший опыт — глубокая практика, экспертные знания и страсть к преподаванию — лег в основу книги «Современный C#». Иэн Гриффитс не просто рассказывает о языке; он погружает читателя в самую суть, учит мыслить как настоящий профессионал и создавать элегантные, эффективные и надежные приложения для любых задач.

Книгу “Современный C#. Разработка настольных, облачных, мобильных и веб-приложений” можно купить в нашем интенет-магазине.

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

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

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

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

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

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

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

Глава 1. Введение в C#…………………………………………………………………………… 23

Почему именно C#?……………………………………………………………………………………………………………………. 24

Управляемый код и CLR………………………………………………………………………………………………… 26

C# предпочитает общность, а не специфичность………………………………………………………… 28

Стандарты и реализации C#…………………………………………………………………………………………………….. 29

Семейство .NET………………………………………………………………………………………………………………. 29

Циклы выпуска и долгосрочная поддержка………………………………………………………………… 31

Ориентир на несколько сред выполнения .NET…………………………………………………………… 32

Visual Studio, Visual Studio Code и JetBrains Rider…………………………………………………………………… 34

Анатомия простой программы…………………………………………………………………………………………………. 37

Написание модульного теста………………………………………………………………………………………… 41

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

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

Разрешение неоднозначности……………………………………………………………………………….. 49

Вложенные пространства имен…………………………………………………………………………….. 50

Классы…………………………………………………………………………………………………………………………….. 51

Модульные тесты53

Резюме…………………………………………………………………………………………………………………………………………. 54

Глава 2. Основы программирования на C#……………………………………………. 55

Локальные переменные…………………………………………………………………………………………………………….. 56

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

Неоднозначность имени переменной……………………………………………………………………………. 62

Экземпляры локальных переменных……………………………………………………………………………. 64

Операторы и выражения…………………………………………………………………………………………………………… 65

Операторы………………………………………………………………………………………………………………………. 65

Выражения………………………………………………………………………………………………………………………. 67

Комментарии и пробелы…………………………………………………………………………………………………………… 73

Директивы препроцессора………………………………………………………………………………………………………… 75

Символы компиляции…………………………………………………………………………………………………….. 75

Директивы #error и #warning………………………………………………………………………………………… 76

Директива #line………………………………………………………………………………………………………………. 77

Директива #pragma………………………………………………………………………………………………………… 77

Директива #nullable……………………………………………………………………………………………………….. 78

Директивы #region и #endregion…………………………………………………………………………………… 78

Основные типы данных…………………………………………………………………………………………………………….. 79

Числовые типы………………………………………………………………………………………………………………… 80

Числовые преобразования…………………………………………………………………………………….. 84

Проверяемый контекст…………………………………………………………………………………………… 87

Типы BigInteger, Int128, UInt128 и Half………………………………………………………………… 89

Логические значения………………………………………………………………………………………………………. 91

Строки и символы…………………………………………………………………………………………………………… 91

Неизменяемость строк……………………………………………………………………………………………. 93

Методы работы со строками………………………………………………………………………………… 93

Форматирование данных в строках……………………………………………………………………… 94

Дословные строковые литералы…………………………………………………………………………… 99

Необработанные строковые литералы……………………………………………………………… 101

Строковые литералы UTF-8………………………………………………………………………………… 103

Кортежи…………………………………………………………………………………………………………………………. 104

Деконструкция кортежа……………………………………………………………………………………………….. 107

Тип dynamic…………………………………………………………………………………………………………………… 108

Тип object………………………………………………………………………………………………………………………. 109

Операторы………………………………………………………………………………………………………………………………… 109

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

Принятие решений с операторами if…………………………………………………………………………… 116

Множественный выбор с операторами switch…………………………………………………………… 118

Циклы: while и do………………………………………………………………………………………………………….. 120

Циклы в стиле языка С…………………………………………………………………………………………………. 121

Перебор коллекции циклом foreach……………………………………………………………………………. 123

Шаблоны………………………………………………………………………………………………………………………………….. 124

Объединение и отрицание шаблонов…………………………………………………………………………. 131

Шаблоны отношений…………………………………………………………………………………………………… 132

Уточнение с помощью when………………………………………………………………………………………… 133

Шаблоны в выражениях………………………………………………………………………………………………. 133

Резюме………………………………………………………………………………………………………………………………………. 136

Глава 3. Типы………………………………………………………………………………………. 137

Классы………………………………………………………………………………………………………………………………………. 137

Входные данные инициализации……………………………………………………………………………….. 140

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

Статические классы……………………………………………………………………………………………………… 143

Записи……………………………………………………………………………………………………………………………………….. 145

Ссылки и значения null……………………………………………………………………………………………………………. 150

Удаление Null с помощью не-nullable ссылочных типов…………………………………………………….. 154

Структуры………………………………………………………………………………………………………………………………… 163

Когда писать тип значения………………………………………………………………………………………….. 167

Гарантия неизменяемости……………………………………………………………………………………………. 171

Структуры записи………………………………………………………………………………………………………… 172

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

Члены типов……………………………………………………………………………………………………………………………… 175

Доступность………………………………………………………………………………………………………………….. 175

Поля……………………………………………………………………………………………………………………………….. 175

Конструкторы……………………………………………………………………………………………………………….. 177

Конструкторы по умолчанию и конструкторы без параметров……………………… 180

Цепочка конструкторов……………………………………………………………………………………….. 183

Статические конструкторы…………………………………………………………………………………. 185

Деконструкторы……………………………………………………………………………………………………………. 190

Методы………………………………………………………………………………………………………………………….. 192

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

Ссылочные переменные и возвращаемые значения…………………………………………. 198

Необязательные аргументы………………………………………………………………………………… 201

Перегрузка…………………………………………………………………………………………………………….. 202

Переменное количество аргументов с ключевым словом params……………………. 203

Локальные функции……………………………………………………………………………………………… 205

Однострочные методы…………………………………………………………………………………………. 206

Методы расширения……………………………………………………………………………………………. 207

Свойства………………………………………………………………………………………………………………………… 208

Синтаксис инициализатора………………………………………………………………………………… 212

Свойства только для инициализации…………………………………………………………………. 213

Обязательные свойства……………………………………………………………………………………….. 215

Вычисляемые свойства………………………………………………………………………………………… 216

Свойства и изменяемые типы значений……………………………………………………………… 216

Индексаторы…………………………………………………………………………………………………………. 219

Операторы…………………………………………………………………………………………………………………….. 221

События…………………………………………………………………………………………………………………………. 224

Вложенные типы…………………………………………………………………………………………………………… 224

Интерфейсы………………………………………………………………………………………………………………………………. 226

Реализация интерфейса по умолчанию……………………………………………………………………… 228

Статические виртуальные члены……………………………………………………………………………….. 230

Перечисления…………………………………………………………………………………………………………………………… 232

Другие типы……………………………………………………………………………………………………………………………… 235

Анонимные типы……………………………………………………………………………………………………………………… 235

Частичные типы и методы………………………………………………………………………………………………………. 237

Резюме………………………………………………………………………………………………………………………………………. 239

Глава 4. Обобщенные типы…………………………………………………………………. 240

Обобщенные типы……………………………………………………………………………………………………………………. 240

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

Ограничения типа…………………………………………………………………………………………………………. 244

Ограничения типа ссылки……………………………………………………………………………………………. 246

Ограничения типа значения………………………………………………………………………………………… 249

Типы значений с ограничением unmanaged………………………………………………………………. 249

Ограничение NotNull……………………………………………………………………………………………………. 250

Другие специальные ограничения типа……………………………………………………………………… 250

Множественные ограничения……………………………………………………………………………………… 250

Значения, подобные нулю………………………………………………………………………………………………………. 251

Обобщенные методы……………………………………………………………………………………………………………….. 252

Вывод типа……………………………………………………………………………………………………………………………….. 253

Обобщенная математика………………………………………………………………………………………………………… 254

Обобщенные математические интерфейсы…………………………………………………………………………… 257

Интерфейсы числовых категорий……………………………………………………………………………….. 257

Интерфейсы операторов………………………………………………………………………………………………. 262

Интерфейсы функций……………………………………………………………………………………………………. 263

Парсинг и форматирование…………………………………………………………………………………………. 263

Обобщения и кортежи……………………………………………………………………………………………………………… 264

Резюме………………………………………………………………………………………………………………………………………. 265

Глава 5. Коллекции……………………………………………………………………………… 266

Массивы……………………………………………………………………………………………………………………………………. 266

Инициализация массива………………………………………………………………………………………………. 269

Поиск и сортировка………………………………………………………………………………………………………. 272

Многомерные массивы………………………………………………………………………………………………… 276

Зубчатые массивы……………………………………………………………………………………………….. 277

Прямоугольные массивы……………………………………………………………………………………… 279

Копирование и изменение размера…………………………………………………………………………….. 280

Класс List<Т>…………………………………………………………………………………………………………………………… 281

Интерфейсы списков и последовательностей……………………………………………………………………….. 285

Реализация списков и последовательностей…………………………………………………………………………. 291

Реализация IEnumerable<T> с итераторами……………………………………………………………… 291

Тип Collection<Т>………………………………………………………………………………………………………… 296

Тип ReadOnlyCollection<T>………………………………………………………………………………………… 297

Обращение по индексу или диапазону………………………………………………………………………………….. 297

Тип System.Index……………………………………………………………………………………………………………. 298

Тип System.Range………………………………………………………………………………………………………….. 300

Поддержка Index и Range в собственных типах………………………………………………………… 303

Словари…………………………………………………………………………………………………………………………………….. 305

Сортированные словари…………………………………………………………………………………………………………. 309

Множества……………………………………………………………………………………………………………………………….. 310

Очереди и стеки……………………………………………………………………………………………………………………….. 311

Связанные списки…………………………………………………………………………………………………………………….. 312

Конкурентные коллекции……………………………………………………………………………………………………….. 313

Неизменяемые коллекции……………………………………………………………………………………………………….. 314

“Замороженные” коллекции……………………………………………………………………………………………………. 317

Резюме………………………………………………………………………………………………………………………………………. 318

Глава 6. Наследование…………………………………………………………………………. 319

Наследование и преобразования…………………………………………………………………………………………… 320

Наследование интерфейса……………………………………………………………………………………………………… 323

Обобщения……………………………………………………………………………………………………………………………….. 325

Ковариантность и контравариантность………………………………………………………………………………… 326

Тип System.Object……………………………………………………………………………………………………………………… 331

Вездесущие методы System.Object………………………………………………………………………………………….. 332

Доступность и наследование………………………………………………………………………………………………….. 333

Виртуальные методы………………………………………………………………………………………………………………. 334

Абстрактные методы……………………………………………………………………………………………………. 337

Наследование и управление версиями библиотек…………………………………………………….. 338

Статические виртуальные методы……………………………………………………………………………… 343

Ограничения по умолчанию………………………………………………………………………………………… 345

Запечатанные методы и классы…………………………………………………………………………………………….. 347

Доступ к членам базового класса………………………………………………………………………………………….. 349

Наследование и конструкторы………………………………………………………………………………………………. 350

Первичные конструкторы……………………………………………………………………………………………. 352

Обязательные свойства………………………………………………………………………………………………… 354

Инициализация поля…………………………………………………………………………………………………….. 356

Записи……………………………………………………………………………………………………………………………………….. 357

Записи, наследование и ключевое слово with………………………………………………………………………. 359

Специальные базовые типы……………………………………………………………………………………………………. 360

Резюме………………………………………………………………………………………………………………………………………. 361

Глава 7. Время жизни объекта……………………………………………………………… 362

Сборка мусора…………………………………………………………………………………………………………………………. 362

Определение достижимости………………………………………………………………………………………… 365

Сборщик не всегда побеждает…………………………………………………………………………………….. 367

Слабые ссылки……………………………………………………………………………………………………………… 369

Возвращение памяти……………………………………………………………………………………………………. 373

Снижение нагрузки с помощью встроенных массивов……………………………………………… 378

Режимы сборщика мусора…………………………………………………………………………………………… 380

Временная приостановка сборки мусора…………………………………………………………………… 383

Случайное разрушительное сжатие…………………………………………………………………………… 384

Принудительная сборка мусора…………………………………………………………………………………. 387

Деструкторы и финализация…………………………………………………………………………………………………… 388

Интерфейс IDisposable…………………………………………………………………………………………………………….. 391

Необязательная утилизация…………………………………………………………………………………………………… 399

Упаковка…………………………………………………………………………………………………………………………………… 399

Упаковка nullable<T>…………………………………………………………………………………………………………….. 404

Резюме           405

Глава 8. Исключения……………………………………………………………………………. 406

Источники исключений…………………………………………………………………………………………………………… 408

Исключения из API……………………………………………………………………………………………………….. 409

Ошибки времени выполнения………………………………………………………………………………………. 411

Обработка исключений…………………………………………………………………………………………………………… 412

Объекты исключений……………………………………………………………………………………………………. 413

Множественные блоки catch……………………………………………………………………………………….. 415

Фильтры исключений…………………………………………………………………………………………………… 416

Вложенные блоки try……………………………………………………………………………………………………. 418

Блоки finally………………………………………………………………………………………………………………….. 419

Выброс исключений………………………………………………………………………………………………………………… 421

Повторная генерация исключений……………………………………………………………………………… 423

Быстрые ошибки…………………………………………………………………………………………………………… 425

Типы исключений…………………………………………………………………………………………………………………….. 426

Пользовательские исключения……………………………………………………………………………………………….. 428

Необработанные исключения………………………………………………………………………………………………… 430

Резюме………………………………………………………………………………………………………………………………………. 432

Глава 9. Делегаты, лямбда-выражения и события………………………………… 433

Типы делегатов………………………………………………………………………………………………………………………… 434

Создание делегата……………………………………………………………………………………………………….. 436

Множественные делегаты……………………………………………………………………………………………. 440

Вызов делегата……………………………………………………………………………………………………………… 441

Распространенные типы делегатов…………………………………………………………………………….. 442

Совместимость типов…………………………………………………………………………………………………… 444

За кадром………………………………………………………………………………………………………………………. 446

Анонимные функции………………………………………………………………………………………………………………… 448

Лямбда-выражения и аргументы по умолчанию………………………………………………………. 451

Захват переменных………………………………………………………………………………………………………. 454

Лямбда-выражения и деревья выражений………………………………………………………………….. 462

События……………………………………………………………………………………………………………………………………. 464

Стандартный паттерн делегата события…………………………………………………………………… 466

Пользовательские методы добавления и удаления…………………………………………………… 467

События и сборщик мусора…………………………………………………………………………………………. 470

События и делегаты……………………………………………………………………………………………………… 471

Делегаты против интерфейсов……………………………………………………………………………………………….. 472

Резюме………………………………………………………………………………………………………………………………………. 473

Глава 10. LINQ…………………………………………………………………………………….. 474

Выражения запроса…………………………………………………………………………………………………………………. 475

Как расписываются выражения запроса………………………………………………………………………………. 478

Отложенное вычисление…………………………………………………………………………………………………………. 480

LINQ, обобщения и IQueryable<T>………………………………………………………………………………………… 482

Стандартные операторы LINQ………………………………………………………………………………………………. 485

Фильтрация…………………………………………………………………………………………………………………… 486

Оператор Select…………………………………………………………………………………………………………….. 489

Формирование данных и анонимные типы……………………………………………………….. 490

Проекция и картографирование………………………………………………………………………….. 492

Оператор SelectMany……………………………………………………………………………………………………. 492

Сортировка……………………………………………………………………………………………………………………. 495

Проверка на наличие……………………………………………………………………………………………………. 498

Конкретные элементы и поддиапазоны……………………………………………………………………… 499

Операции, сохраняющие последовательность и порядок………………………………………… 504

Агрегация………………………………………………………………………………………………………………………. 504

Группировка…………………………………………………………………………………………………………………. 509

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

Генерация последовательности……………………………………………………………………………………………… 519

Другие реализации LINQ………………………………………………………………………………………………………… 519

Entity Framework Core………………………………………………………………………………………………….. 519

Parallel LINQ (PLINQ)……………………………………………………………………………………………………. 520

LINQ to XML…………………………………………………………………………………………………………………. 520

IAsyncEnumerable<T>………………………………………………………………………………………………….. 521

Реактивные расширения………………………………………………………………………………………………. 521

Резюме………………………………………………………………………………………………………………………………………. 521

Глава 11. Rx: Реактивные расширения………………………………………………… 522

Фундаментальные интерфейсы………………………………………………………………………………………………. 524

Интерфейс IObserver<T>……………………………………………………………………………………………… 525

Интерфейс IObservable<T>………………………………………………………………………………………….. 526

Реализация холодного источника………………………………………………………………………. 527

Реализация горячего источника………………………………………………………………………….. 530

Публикация и подписка с использованием делегатов………………………………………………………….. 533

Создание наблюдаемого источника с помощью делегатов……………………………………… 533

Подписка на наблюдаемый источник с помощью делегата…………………………………….. 536

Создание последовательностей……………………………………………………………………………………………… 537

Empty……………………………………………………………………………………………………………………………… 538

Never………………………………………………………………………………………………………………………………. 538

Return…………………………………………………………………………………………………………………………….. 538

Throw……………………………………………………………………………………………………………………………… 539

Range……………………………………………………………………………………………………………………………… 539

Repeat…………………………………………………………………………………………………………………………….. 539

Generate…………………………………………………………………………………………………………………………. 539

Запросы LINQ………………………………………………………………………………………………………………………….. 540

Операторы группировки………………………………………………………………………………………………. 543

Операторы объединения……………………………………………………………………………………………… 544

Оператор SelectMany……………………………………………………………………………………………………. 547

Агрегация и другие операторы с одним значением…………………………………………………… 547

Оператор Concat…………………………………………………………………………………………………………… 548

Операторы запроса Rx……………………………………………………………………………………………………………. 549

Merge……………………………………………………………………………………………………………………………… 549

Оконные операторы……………………………………………………………………………………………………… 551

Операторы Window и Buffer………………………………………………………………………………… 553

Разметка окон с наблюдаемыми объектами………………………………………………………. 556

Оператор Scan………………………………………………………………………………………………………………. 557

Оператор Amb……………………………………………………………………………………………………………….. 558

Оператор DistinctUntilChanged…………………………………………………………………………………… 559

Планировщики…………………………………………………………………………………………………………………………. 559

Настройка планировщиков…………………………………………………………………………………………. 560

Метод ObserveOn………………………………………………………………………………………………….. 561

Метод SubscribeOn………………………………………………………………………………………………. 562

Явная передача планировщиков………………………………………………………………………… 562

Встроенные планировщики…………………………………………………………………………………………. 562

Субъекты………………………………………………………………………………………………………………………………….. 563

Subject<T>…………………………………………………………………………………………………………………….. 564

BehaviorSubject<T>……………………………………………………………………………………………………… 564

ReplaySubject<T>…………………………………………………………………………………………………………. 565

AsyncSubject<T>…………………………………………………………………………………………………………… 565

Адаптация………………………………………………………………………………………………………………………………… 565

IEnumerable<T> и IAsyncEnumerable<T>………………………………………………………………….. 566

События .NET……………………………………………………………………………………………………………….. 568

Асинхронные API…………………………………………………………………………………………………………. 569

Временные последовательности……………………………………………………………………………………………. 571

Источники с заданным временем………………………………………………………………………………… 571

Операторы с заданным временем……………………………………………………………………………….. 572

Операторы временного окна……………………………………………………………………………………….. 573

Reaqtor — Rx как сервис…………………………………………………………………………………………………………. 574

Резюме………………………………………………………………………………………………………………………………………. 576

Глава 12. Сборки и развертывание………………………………………………………. 577

Анатомия сборки……………………………………………………………………………………………………………………… 577

Метаданные .NET…………………………………………………………………………………………………………. 578

Ресурсы………………………………………………………………………………………………………………………….. 579

Многофайловые сборки……………………………………………………………………………………………….. 579

Другие возможности PE……………………………………………………………………………………………….. 579

Ресурсы в стиле Win32…………………………………………………………………………………………. 579

Консоль против графического интерфейса……………………………………………………….. 581

Идентичность типа………………………………………………………………………………………………………………….. 581

Развертывание………………………………………………………………………………………………………………………….. 584

Зависит от фреймворка………………………………………………………………………………………………… 585

Автономная модель………………………………………………………………………………………………………. 587

Усечение………………………………………………………………………………………………………………………… 587

Компиляция Ahead-of-Time (AOT)………………………………………………………………………………. 589

ReadyToRun………………………………………………………………………………………………………….. 589

Native АОТ…………………………………………………………………………………………………………….. 590

Загрузка сборок……………………………………………………………………………………………………………………….. 591

Разрешение сборки……………………………………………………………………………………………………….. 593

Явная загрузка………………………………………………………………………………………………………………. 595

Изоляция и плагины с помощью AssemblyLoadContext…………………………………………….. 596

Имена сборок……………………………………………………………………………………………………………………………. 598

Строгие имена………………………………………………………………………………………………………………. 598

Версия……………………………………………………………………………………………………………………………. 601

Номера версий и загрузка сборок……………………………………………………………………………….. 603

Культура……………………………………………………………………………………………………………………….. 604

Защита………………………………………………………………………………………………………………………………………. 608

Целевые фреймворки и .NET Standard……………………………………………………………………………………. 608

Резюме………………………………………………………………………………………………………………………………………. 610

Глава 13. Рефлексия…………………………………………………………………………….. 612

Типы рефлексии……………………………………………………………………………………………………………………….. 613

Класс Assembly……………………………………………………………………………………………………………… 615

Класс Module………………………………………………………………………………………………………………… 618

Тип MemberInfo…………………………………………………………………………………………………………….. 618

Type и TypeInfo………………………………………………………………………………………………………………. 621

Обобщенные типы………………………………………………………………………………………………………… 625

Классы MethodBase, ConstructorInfo и MethodInfo…………………………………………………… 626

Класс ParameterInfo……………………………………………………………………………………………………… 628

Класс FieldInfo……………………………………………………………………………………………………………… 628

Класс PropertyInfo………………………………………………………………………………………………………… 629

Класс EventInfo…………………………………………………………………………………………………………….. 629

Контексты рефлексии………………………………………………………………………………………………………………. 629

Резюме………………………………………………………………………………………………………………………………………. 631

Глава 14. Атрибуты……………………………………………………………………………… 633

Применение атрибутов……………………………………………………………………………………………………………. 633

Цели атрибутов…………………………………………………………………………………………………………….. 636

Атрибуты, обрабатываемые компилятором………………………………………………………………. 639

Имена и версии……………………………………………………………………………………………………… 640

Описание и сопутствующие ресурсы…………………………………………………………………. 641

Атрибуты информации о вызывающем объекте……………………………………………….. 642

Атрибуты, обрабатываемые CLR……………………………………………………………………………….. 646

Атрибут InternalsVisibleToAttribute……………………………………………………………………. 646

JIT-компиляция…………………………………………………………………………………………………….. 648

Атрибуты STAThread и MTAThread…………………………………………………………………….. 649

Атрибуты отладки………………………………………………………………………………………………………… 650

Атрибуты времени сборки…………………………………………………………………………………………… 650

Сериализация JSON без рефлексии…………………………………………………………………….. 650

Генерация регулярных выражений…………………………………………………………………….. 650

Внутреннее взаимодействие……………………………………………………………………………….. 651

Определение и использование атрибутов……………………………………………………………………………… 652

Типы атрибутов……………………………………………………………………………………………………………. 653

Получение атрибутов…………………………………………………………………………………………………… 654

Загрузка только метаданных………………………………………………………………………………………. 656

Обобщенные типы атрибутов…………………………………………………………………………………………………. 658

Резюме………………………………………………………………………………………………………………………………………. 658

Глава 15. Файлы и потоки……………………………………………………………………. 660

Класс Stream…………………………………………………………………………………………………………………………….. 661

Позиция и поиск……………………………………………………………………………………………………………. 662

Сброс……………………………………………………………………………………………………………………………… 663

Копирование…………………………………………………………………………………………………………………. 664

Свойство Length……………………………………………………………………………………………………………. 664

Утилизация……………………………………………………………………………………………………………………. 665

Асинхронная операция………………………………………………………………………………………………… 666

Конкретные типы потоков…………………………………………………………………………………………… 667

Один тип, много поведений………………………………………………………………………………………….. 668

Текстово-ориентированные типы…………………………………………………………………………………………… 669

Абстрактные классы TextReader и TextWriter……………………………………………………………. 670

Конкретные типы читателей и писателей………………………………………………………………….. 672

Классы StreamReader и StreamWriter…………………………………………………………………. 672

Классы StringReader и StringWriter……………………………………………………………………. 673

Кодирование…………………………………………………………………………………………………………………. 674

Кодировки кодовых страниц………………………………………………………………………………. 675

Использование кодировок напрямую…………………………………………………………………. 676

Файлы и каталоги……………………………………………………………………………………………………………………. 677

Класс FileStream…………………………………………………………………………………………………………… 677

Класс File………………………………………………………………………………………………………………………. 679

Класс Directory……………………………………………………………………………………………………………… 681

Класс Path…………………………………………………………………………………………………………………….. 682

Сериализация…………………………………………………………………………………………………………………………… 683

Классы BinaryReader, BinaryWriter и BinaryPrimitives……………………………………………… 683

Сериализация CLR……………………………………………………………………………………………………….. 684

JSON……………………………………………………………………………………………………………………………….. 685

Класс JsonSerializer……………………………………………………………………………………………… 686

JSON DOM…………………………………………………………………………………………………………….. 692

Резюме………………………………………………………………………………………………………………………………………. 695

Глава 16. Многопоточность………………………………………………………………….. 697

Потоки………………………………………………………………………………………………………………………………………. 697

Потоки, переменные и общее состояние…………………………………………………………………….. 698

Локальное хранилище потока…………………………………………………………………………………….. 702

Класс Thread…………………………………………………………………………………………………………………. 704

Пул потоков…………………………………………………………………………………………………………………… 706

Запуск задач в пуле потоков с помощью Task…………………………………………………… 706

Эвристика создания потока………………………………………………………………………………… 707

Привязка к потоку и SynchronizationContext……………………………………………………………… 708

Класс ExecutionContext……………………………………………………………………………………………….. 710

Синхронизация………………………………………………………………………………………………………………………… 712

Мониторы и ключевое слово lock……………………………………………………………………………….. 713

Как расширяется ключевое слово lock………………………………………………………………. 716

Ожидание и уведомление…………………………………………………………………………………….. 717

Тайм-ауты…………………………………………………………………………………………………………….. 719

Другие примитивы синхронизации…………………………………………………………………………….. 719

Класс Interlocked………………………………………………………………………………………………………….. 720

“Ленивая” инициализация……………………………………………………………………………………………. 722

Класс Lazy<T>……………………………………………………………………………………………………… 723

Класс LazyInitializer…………………………………………………………………………………………….. 724

Прочие средства поддержки конкурентности……………………………………………………………. 724

Задачи………………………………………………………………………………………………………………………………………. 726

Классы Task и Task<T>………………………………………………………………………………………………… 726

Типы ValueTask и ValueTask<T>………………………………………………………………………… 727

Способы создания задачи…………………………………………………………………………………… 729

Статус задачи………………………………………………………………………………………………………. 729

Получение результата…………………………………………………………………………………………. 730

Продолжения………………………………………………………………………………………………………………… 731

Планировщики………………………………………………………………………………………………………………. 734

Обработка ошибок……………………………………………………………………………………………………….. 735

Пользовательские задачи без потоков……………………………………………………………………….. 736

Отношения “родитель/ребенок”………………………………………………………………………………….. 737

Составные задачи………………………………………………………………………………………………………… 738

Другие асинхронные шаблоны………………………………………………………………………………………………. 738

Отмена………………………………………………………………………………………………………………………………………. 740

Параллелизм…………………………………………………………………………………………………………………………….. 740

Класс Parallel……………………………………………………………………………………………………………….. 740

Parallel LINQ………………………………………………………………………………………………………………….. 742

TPL Dataflow…………………………………………………………………………………………………………………. 742

Резюме………………………………………………………………………………………………………………………………………. 743

Глава 17. Асинхронные функции языка………………………………………………. 744

Ключевые слова: async и await………………………………………………………………………………………………. 745

Контексты выполнения и синхронизации………………………………………………………………….. 749

Множественные операции и циклы…………………………………………………………………………….. 751

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

Асинхронная утилизация…………………………………………………………………………………….. 756

Возврат задачи……………………………………………………………………………………………………………… 757

Применение async к вложенным методам…………………………………………………………………… 759

Шаблон await…………………………………………………………………………………………………………………………… 759

Обработка ошибок…………………………………………………………………………………………………………………… 764

Проверка аргументов…………………………………………………………………………………………………… 766

Единичные и множественные исключения…………………………………………………………………. 768

Конкурентные операции и пропущенные исключения…………………………………………….. 769

Резюме………………………………………………………………………………………………………………………………………. 770

Глава 18. Эффективная работа с памятью……………………………………………. 772

(Не) копируйте…………………………………………………………………………………………………………………………. 773

Представление последовательных элементов с помощью Span<T>………………………………….. 776

Вспомогательные методы……………………………………………………………………………………………. 781

Выражения коллекций и последовательности…………………………………………………………… 781

Сопоставление с образцом………………………………………………………………………………………….. 782

Только стек……………………………………………………………………………………………………………………. 783

Использование ref с полями……………………………………………………………………………………………………. 783

Представление последовательности элементов с помощью Memory<T>………………………….. 787

Тип ReadOnlySequence<T>…………………………………………………………………………………………………….. 788

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

Обработка JSON в ASP.NET Core……………………………………………………………………………………………. 791

Резюме………………………………………………………………………………………………………………………………………. 796

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

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

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

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

На Марсе Маркусу не место!

На Марсе Маркусу не место

Робот  Маркус создан, чтобы чинить сложных роботов, и его очень ждут на Марсе. На красную планету Маркус оправляется со своим помощником Лучиком, которого сделал сам из старого будильника. Но Марс и новый знакомый робот Брудер, который терпит бедствие,  встречают их очень неприветливо. Чтобы избежать опасностей, Маркусу придется проявить всю свою находчивость, смелость и даже чувство юмора.

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

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

«Я в норме. Пойдём пить какао!»

Робот Маркус может починить что угодно и в любой ситуации найдет нестандартное решение. Он любит жить на Земле, но знает о Марсе всё — потому что именно для работы на этой планете его создал гениальный профессор Точкин. Но для начала Маркус  из сломанного будильника собрал себе верного друга и помощника — Лучика.

Маркус и Лучик отправляются на Марс, где их помощи ждет Брудер,  сломанный робот-исследователь. У нового знакомого оказался неуживчивый характер, как и у самой красной планеты. Маркусу и Лучику будет нелегко справиться со всеми трудностями и опасностями. Но они знают, что далеко-далеко на Земле их ждут друзья и горячая кружка какао. А что еще надо для счастья роботам?

Робот Маркус

 

Автор

Нет фото

Антон Бабчук — писатель, сценарист мультипликационных сериалов, создатель более 200 песен,  мечтает создавать мультфильмы по своим произведениям.

Художник

Нет фото

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

Робот

Маркус — робот-ремонтник с душой исследователя и твёрдым убеждением, что лучше какао могут быть только какао с друзьями. Создан чинить сложные механизмы на Марсе, но предпочитает чинить сломанные будильники и находить общий язык с капризными марсоходами. Обладает не только полным набором инструментов, но и чувством юмора, любопытством и талантом попадать в невероятные переделки. Его девиз: «Я в норме. Пойдём пить какао!»

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

Вышла книга “Программирование бэкенда на Python. Практическое руководство”

Программирование бэкенда на Python. Практическое руководство

Книга посвящена современным технологиям для программирования и поддержки серверной части (бэкенда) на Python. Рассказано о программировании на Python в облачной среде, управляемой через Docker и Kubernetes, о фреймворке Flask для веб-разработки на Python, о поглощении и преобразовании данных через FastAPI, об интеграции новых приложений и модулей Python с устоявшимися базами данных с применением SQLAlchemy, авторизации и аутентификации с применением OAuth, взаимодействии с брокерами сообщений Kafka и RabbitMQ, а также о повышении производительности языка Python и об эффективной работе с унаследованным кодом.

Для Python-разработчиков

В этой книге

  • Как писать эффективный и хорошо структурированный код на Python, придерживаясь наилучших практик
  • Как обеспечить эффективность приложений и упростить их масштабирование, применяя техники асинхронного программирования
  • Какова роль Kubernetes и Docker в оркестрации и контейнеризации приложений на Python
  • Как эксплуатировать облачные сервисы для обеспечения гарантированно высокой доступности и максимальной производительности.
  • Как усовершенствовать обработку данных путем интеграции с базами данных при помощи SQLAlchemy.
  • Как защищать веб-приложения, настраивая механизмы авторизации и аутентификации при помощи OAuth
  • Как эффективно обрабатывать данные в режиме реального времени при помощи брокеров сообщений RabbitMQ и Kafka
  • Как, сократить количество ошибок, реализовать непрерывную интеграцию и непрерывное развертывание

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

 

Тим Питерс

Тим Питерс (Tim Peters) — американский разработчик программного обеспечения, который создал алгоритм гибридной сортировки Timsort, внес большой вклад в язык программирования Python и его оригинальную реализацию CPython, а также известен в сообществе Python.
С 2001 по 2014 год он был активным членом совета директоров Python Software Foundation. Питерс был влиятельным автором списков рассылки Python. Он также является высокопоставленным участником форума Stack Overflow, в основном для ответов, касающихся Python.
Тим Питерс был удостоен награды Python Software Foundation за выдающиеся заслуги за 2017 год.
(источник, Википедия)

Книгу “Программирование бэкенда на Python. Практическое руководство” можно купить в нашем интенет-магазине.

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

Пролог……………………………………………………………………………. 23

Предварительные требования…………………………………………… 25

Начальные навыки…………………………………………………………………………………… 25

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

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

ГЛАВА 1. Основы разработки внутренних компонентов……… 28

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

Описание разработки внутренних компонентов…………………………………… 29

Основные внутренние компоненты…………………………………………………. 29

Сервер…………………………………………………………………………………………… 29

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

Интерфейсы прикладного программирования (API)………………… 32

Веб-фреймворк……………………………………………………………………………… 33

Middleware (связующее или промежуточное программное обеспечение)      35

Кеширование………………………………………………………………………………… 36

Функционирование внутренних компонентов……………………………….. 36

Роль Python в разработке внутренних компонентов…………………………….. 38

Универсальность и читабельность…………………………………………………. 38

Универсальная стандартная библиотека………………………………………. 39

Фреймворки и инструменты для разработки внутренних компонентов               39

Поддержка асинхронной работы……………………………………………………. 40

Возможность интеграции…………………………………………………………………. 40

Возможность подключения к базам данных………………………………….. 41

Сообщество и ресурсы…………………………………………………………………….. 41

Искусственный интеллект и машинное обучение………………………….. 41

Настройка среды разработки: Python, VS Code и Linux………………………. 42

Установка Linux……………………………………………………………………………….. 42

Установка Python……………………………………………………………………………… 42

Установка Visual Studio Code (VS Code)…………………………………………. 43

Настройка VS Code для Python……………………………………………………….. 43

Настройка виртуальной среды……………………………………………………….. 44

Заключительные этапы и тестирование…………………………………………. 44

Знакомство с виртуальными средами…………………………………………………….. 45

Что такое виртуальная среда?………………………………………………………… 45

Зачем нужна виртуальная среда?…………………………………………………… 46

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

Установка……………………………………………………………………………………… 46

Создание виртуальной среды…………………………………………………….. 46

Активация виртуальной среды…………………………………………………… 47

Установка пакетов……………………………………………………………………….. 47

Деактивация…………………………………………………………………………………. 47

Управление зависимостями………………………………………………………… 47

Передовой опыт………………………………………………………………………………… 48

Основные принципы работы с интерфейсом командной строки (CLI).. 49

Описание интерфейса командной строки………………………………………. 49

Основные команды интерфейса командной строки………………………. 49

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

Введение в управление версиями с помощью Git………………………………….. 53

Знакомство с управлением версиями и Git……………………………………… 53

Основные операции Git для разработки внутренних компонентов 54

Установка Git……………………………………………………………………………….. 54

Конфигурирование Git…………………………………………………………………. 54

Инициализация репозитория………………………………………………………. 54

Клонирование репозитория………………………………………………………… 55

Добавление и фиксация файлов………………………………………………….. 55

Ветвление и слияние……………………………………………………………………. 55

Размещение изменений………………………………………………………………… 56

Извлечение обновлений………………………………………………………………. 56

Обработка конфликтов при слиянии………………………………………….. 56

Использование журнала Git………………………………………………………… 56

Библиотека Python Refresher: синтаксис, структуры данных и функции 57

Синтаксис Python……………………………………………………………………………… 57

Отступы………………………………………………………………………………………… 57

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

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

Структуры данных…………………………………………………………………………… 58

Списки…………………………………………………………………………………………… 58

Кортежи………………………………………………………………………………………… 58

Множества……………………………………………………………………………………. 59

Словари………………………………………………………………………………………… 59

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

Определение функции………………………………………………………………….. 59

Вызов функции……………………………………………………………………………… 60

Параметры……………………………………………………………………………………. 60

Аргументы ключевых слов………………………………………………………….. 60

Произвольные аргументы……………………………………………………………. 61

Лямбда-функции…………………………………………………………………………… 61

Обработка ошибок……………………………………………………………………………. 61

Модули и пакеты………………………………………………………………………………. 62

Импорт модулей…………………………………………………………………………… 62

Импорт с помощью псевдонимов……………………………………………….. 62

Оператор импорта from……………………………………………………………….. 62

Передовой опыт программирования на Python…………………………………….. 63

Поддержка принципов «Дзен Python»…………………………………………….. 63

Соблюдение стандарта PEP 8…………………………………………………………. 63

Написание документальных строк…………………………………………………. 64

Использование встроенных функций и библиотек Python……………. 64

Использование списков и генераторов выражений……………………….. 65

Обработка ошибок с помощью исключений………………………………….. 65

Использование менеджеров контекста для управления ресурсами 66

Функция должна выполнять одну задачу и иметь
минимально возможный размер………………………………………………………. 66

Избежание преждевременной оптимизации…………………………………… 66

Использование контроля версий……………………………………………………… 67

Тестирование своего кода……………………………………………………………….. 67

Резюме……………………………………………………………………………………………………….. 67

ГЛАВА 2. Создание первого веб-приложения с помощью Flask 69

Введение……………………………………………………………………………………………………. 69

Основы Flask……………………………………………………………………………………………… 70

Что представляет собой Flask?………………………………………………………… 70

Основные возможности Flask…………………………………………………………… 71

Простота……………………………………………………………………………………….. 71

Гибкость……………………………………………………………………………………….. 71

Сервер разработки и отладчик…………………………………………………… 72

Основан на Юникоде…………………………………………………………………… 72

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

Запуск и работа с Flask……………………………………………………………………. 72

Маршрутизация………………………………………………………………………………… 74

Шаблоны…………………………………………………………………………………………… 74

Настройка окружения Flask…………………………………………………………………….. 76

Создание проекта……………………………………………………………………………… 76

Настройка Flask………………………………………………………………………………… 77

Установка Flask……………………………………………………………………………. 77

Создание приложения Flask………………………………………………………… 77

Создание простого представления…………………………………………….. 77

Управление зависимостями с помощью Pip……………………………………. 77

Настройка приложения Flask………………………………………………………….. 78

Создание файла конфигурации………………………………………………….. 78

Загрузка конфигурации……………………………………………………………….. 78

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

Командная строка Flask………………………………………………………………. 78

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

Маршрутизация и представления…………………………………………………………… 79

Определение маршрутов………………………………………………………………….. 80

Динамические маршруты………………………………………………………………… 80

Методы HTTP……………………………………………………………………………………. 81

Создание URL-адресов…………………………………………………………………….. 81

Обработка ошибок……………………………………………………………………………. 82

Эффективное сочетание маршрутов и представлений………………….. 83

Шаблоны и статические файлы………………………………………………………………. 83

Описание шаблонов…………………………………………………………………………. 84

Управление статическими файлами……………………………………………….. 85

Организация статических файлов………………………………………………. 86

Обслуживание статических файлов…………………………………………… 86

Работа с формами и загрузка файлов…………………………………………………….. 88

Flask — работа с формами………………………………………………………………. 88

Создание HTML-формы………………………………………………………………. 88

Создание маршрута для отображения формы………………………….. 88

Обработка данных формы………………………………………………………….. 88

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

Модификация HTML-формы для загрузки файлов…………………… 89

Обработка загрузки файлов в Flask……………………………………………. 89

Основы интеграции баз данных……………………………………………………………… 90

Настройка SQLAlchemy с помощью Flask……………………………………… 92

Установка Flask-SQLAlchemy…………………………………………………….. 92

Настройка приложения……………………………………………………………….. 92

Определение моделей………………………………………………………………………. 92

Создание базы данных…………………………………………………………………….. 93

Взаимодействие с базой данных…………………………………………………….. 93

Вставка данных……………………………………………………………………………. 93

Запрос данных……………………………………………………………………………… 93

Обновление данных…………………………………………………………………….. 94

Удаление данных…………………………………………………………………………. 94

Работа с отношениями……………………………………………………………………… 94

Извлечение связанных данных………………………………………………………… 95

Использование опций запросов………………………………………………………. 95

Введение в расширения Flask………………………………………………………………….. 96

Описание расширений Flask……………………………………………………………. 96

Flask-WTF……………………………………………………………………………………… 97

Flask-SQLAlchemy………………………………………………………………………… 97

Flask-Migrate…………………………………………………………………………………. 97

Flask-Login…………………………………………………………………………………….. 98

Flask-Mail………………………………………………………………………………………. 98

Flask-RESTful……………………………………………………………………………….. 98

Использование расширений Flask…………………………………………………… 99

Развертывание приложения Flask…………………………………………………………. 100

Подготовка приложения Flask к развертыванию…………………………. 100

Выбор хостинга………………………………………………………………………………. 101

Настройка веб-сервера и сервера приложений WSGI………………… 101

Использование Heroku…………………………………………………………………… 102

Подготовка приложения……………………………………………………………. 102

Настройка Git-репозитория………………………………………………………. 102

Создание приложения Heroku………………………………………………….. 102

Выполнение проверки развертывания…………………………………….. 103

Резюме……………………………………………………………………………………………………… 103

ГЛАВА 3. Дополнительные возможности Flask………………….. 105

Введение………………………………………………………………………………………………….. 105

Создание модульной структуры больших приложений с помощью
Flask Blueprints………………………………………………………………………………………… 106

Для чего предназначен Flask Blueprints?………………………………………. 106

Создание и регистрация эскизов…………………………………………………… 107

Определение эскиза…………………………………………………………………… 107

Регистрация эскиза…………………………………………………………………….. 107

Структурирование представлений в эскизах………………………………. 108

Использование эскизов…………………………………………………………………… 108

Шаблон Application Factory во Flask…………………………………………………….. 109

Описание шаблона Application Factory………………………………………… 109

Использование шаблона Application Factory……………………………….. 110

Создание функции Factory………………………………………………………… 110

Настройка параметров конфигурации…………………………………….. 110

Регистрация сценариев и расширений…………………………………….. 111

Реализация RESTful-сервисов с помощью Flask-RESTful…………………… 112

Введение в Flask-RESTful………………………………………………………………. 112

Функционирование Flask-RESTful………………………………………………… 113

Создание REST API с помощью Flask-RESTful……………………………. 113

Тестирование API…………………………………………………………………………… 115

Аутентификация и авторизация пользователей………………………………….. 115

Значение аутентификации, авторизации и управления сессиями 115

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

Авторизация……………………………………………………………………………….. 116

Управление сессиями………………………………………………………………… 116

Реализация аутентификации в Flask……………………………………………… 116

Установка Flask-Login……………………………………………………………….. 116

Настройка Flask-Login………………………………………………………………. 116

Функция загрузчика пользователя…………………………………………… 117

Определение модели пользователя………………………………………….. 117

Создание маршрутов аутентификации……………………………………. 117

Выполнение авторизации………………………………………………………………. 118

Управление доступом на основе ролей (RBAC)……………………… 118

Проверка прав доступа……………………………………………………………… 119

Обработка ошибок и ведение журнала………………………………………………… 119

Flask — обработка ошибок……………………………………………………………. 120

Обработка ошибок приложения……………………………………………….. 120

Обработка исключений…………………………………………………………….. 120

Flask — ведение журнала………………………………………………………………. 121

Использование протоколирования для данных запроса……………. 121

Пользовательские средства регистрации…………………………………….. 122

Методы оптимизации производительности…………………………………………. 122

Оптимизация баз данных……………………………………………………………….. 123

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

Пакетные вставки и обновления……………………………………………….. 123

Оптимизация обработки запросов………………………………………………… 123

Эффективная последовательность данных……………………………… 123

Асинхронные обработчики………………………………………………………. 124

Кеширование ответов………………………………………………………………… 125

Настройка приложений и веб-серверов……………………………………….. 125

Мониторинг и профилирование……………………………………………………. 126

Интеграция приложений Flask с Docker……………………………………………….. 127

Установка Docker……………………………………………………………………………. 127

Создание файла Dockerfile………………………………………………………… 128

Создание файла .dockerignore…………………………………………………… 129

Сборка образа Docker……………………………………………………………….. 129

Запуск контейнера Docker………………………………………………………… 129

Тестирование контейнера Docker…………………………………………………. 129

Резюме……………………………………………………………………………………………………… 130

ГЛАВА 4. Введение в FastAPI………………………………………….. 132

Введение………………………………………………………………………………………………….. 132

Переход на FastAPI………………………………………………………………………………… 133

Основные различия между FastAPI и Flask………………………………….. 133

Производительность………………………………………………………………….. 133

Аннотации типов данных и автоматическая валидация данных 134

Внедрение зависимостей…………………………………………………………… 135

Встроенная интерактивная документация по API………………….. 136

Современные возможности Python…………………………………………… 136

Создание RESTful API с помощью FastAPI………………………………………….. 136

Определение конечных точек RESTful…………………………………………. 137

Параметры пути и строки запросов……………………………………………… 138

Параметры пути…………………………………………………………………………. 138

Параметры запросов…………………………………………………………………. 138

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

Обработка ответа…………………………………………………………………………… 139

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

Заголовки ответа……………………………………………………………………….. 139

Обработка ошибок…………………………………………………………………………. 140

Внедрение зависимостей……………………………………………………………………….. 140

Описание внедрения зависимостей в FastAPI………………………………. 141

Как работает внедрение зависимостей в FastAPI?………………………. 141

Определение зависимостей……………………………………………………….. 141

Использование зависимостей в обработчиках маршрутов……. 142

Работа с зависимостями в больших приложениях………………………. 143

Расширенная интеграция баз данных с SQLAlchemy…………………………. 143

Настройка SQLAlchemy с помощью FastAPI……………………………….. 144

Установка необходимых пакетов…………………………………………….. 144

Настройка URL базы данных…………………………………………………… 144

Создание базы данных и таблиц……………………………………………… 144

Интеграция SQLAlchemy с FastAPI……………………………………………….. 145

Зависимость от сеанса работы с базой данных……………………… 145

Выполнение операций с базой данных……………………………………. 145

Асинхронная обработка………………………………………………………………… 146

Настройка асинхронного подключения к базе данных…………. 146

Подключение и отключение событий………………………………………. 146

Использование асинхронных запросов…………………………………… 146

Реализация фоновых задач……………………………………………………………………. 147

Основы фоновых задач в FastAPI………………………………………………….. 147

Как определить фоновые задачи?…………………………………………………. 147

Реализация более сложных фоновых операций………………………….. 148

Настройка Celery……………………………………………………………………….. 148

Запуск задач Celery из FastAPI…………………………………………………. 149

Интеграция FastAPI и Docker………………………………………………………………… 150

Установка Docker……………………………………………………………………………. 150

Создание Docker-файла для FastAPI…………………………………………….. 150

Создание образа Docker………………………………………………………………… 151

Запуск приложения FastAPI в контейнере Docker……………………….. 152

Проверка работоспособности приложения…………………………………. 152

Резюме……………………………………………………………………………………………………… 152

ГЛАВА 5. Работа с базами данных…………………………………… 154

Введение………………………………………………………………………………………………….. 154

MySQL и PostgreSQL………………………………………………………………………………. 155

MySQL……………………………………………………………………………………………… 156

PostgreSQL……………………………………………………………………………………….. 156

Выбор между MySQL и PostgreSQL………………………………………………. 157

MongoDB…………………………………………………………………………………………………. 159

Описание MongoDB и модели документов…………………………………… 159

Документы………………………………………………………………………………….. 159

Коллекции…………………………………………………………………………………… 159

Преимущества MongoDB……………………………………………………………….. 160

Ключевые особенности MongoDB………………………………………………… 160

Интеграция MongoDB…………………………………………………………………….. 161

Установка…………………………………………………………………………………… 161

Подключение к MongoDB…………………………………………………………. 161

Операции…………………………………………………………………………………….. 161

Принципы проектирования баз данных……………………………………………….. 162

Основные принципы проектирования баз данных………………………. 162

Нормализация……………………………………………………………………………. 162

Модель отношений между сущностями…………………………………… 163

Пример разработки схемы базы данных……………………………………… 163

SQL-код для создания таблиц……………………………………………………….. 164

Операции CRUD……………………………………………………………………………………… 165

Создание записей (CREATE)…………………………………………………………. 165

Чтение записей (READ)………………………………………………………………….. 166

Обновление записей (UPDATE)……………………………………………………… 166

Удаление записей (DELETE)…………………………………………………………. 167

Рекомендации по выполнению операций CRUD…………………………. 167

Расширенные методы обработки запросов…………………………………………. 167

Подзапросы…………………………………………………………………………………….. 168

Пример программы: «Поиск курсов, на которые не зарегистрировался ни один студент»      168

Объединения……………………………………………………………………………………. 168

Пример программы: «Список студентов с информацией о курсах» 169

Агрегатные функции SQL………………………………………………………………. 169

Пример программы: «Подсчет количества студентов, записанных на каждый курс»               169

Расширенная фильтрация с помощью оператора HAVING………… 170

Пример программы: «Курсы с более чем 5 студентами»……….. 170

Оконные функции……………………………………………………………………………. 170

Пример программы: «Распределение студентов по дате зачисления на каждый курс»            170

Миграция баз данных и контроль версий……………………………………………. 171

Основные сведения о миграции баз данных………………………………… 172

Настройка Alembic…………………………………………………………………………. 172

Установка Alembic…………………………………………………………………….. 172

Инициализация Alembic…………………………………………………………….. 172

Настройка Alembic…………………………………………………………………….. 173

Создание и применение миграций………………………………………………… 173

Создание миграции……………………………………………………………………. 173

Редактирование сценария миграции………………………………………… 173

Применение миграций……………………………………………………………….. 173

Управление изменениями схемы базы данных……………………………. 174

Создание версий………………………………………………………………………… 174

Совместная работа……………………………………………………………………. 174

Развертывание……………………………………………………………………………. 174

Интеграция баз данных с ОРМ на Python……………………………………………. 175

Обзор ОРМ для Python…………………………………………………………………… 175

Обзор SQLAlchemy…………………………………………………………………………. 175

SQLAlchemy Core……………………………………………………………………….. 175

SQLAlchemy ORM……………………………………………………………………… 176

Интеграция SQLAlchemy ORM с Python………………………………………. 176

Установка…………………………………………………………………………………… 176

Определение моделей………………………………………………………………… 176

Создание сессии…………………………………………………………………………. 177

Выполнение операций с базой данных……………………………………. 177

Стратегии кеширования для оптимизации баз данных………………………. 178

Типы кеширования…………………………………………………………………………. 178

Кеширование результатов………………………………………………………… 178

Кеширование объектов……………………………………………………………… 178

Кеширование планов запросов………………………………………………… 179

Реализация кеширования в веб-приложениях……………………………… 180

Redis в качестве кеша………………………………………………………………… 180

Стратегия кеширования…………………………………………………………….. 180

Рекомендации по эффективному кешированию…………………………… 181

Резюме……………………………………………………………………………………………………… 181

ГЛАВА 6. Асинхронное программирование в Python…………. 184

Введение………………………………………………………………………………………………….. 184

Общее описание асинхронного программирования…………………………… 186

Что такое асинхронное программирование?……………………………….. 186

Асинхронное программирование для разработки внутренних компонентов     186

Примеры использования асинхронного программирования……… 187

Веб-серверы……………………………………………………………………………….. 187

Обработка данных…………………………………………………………………….. 187

Работа приложения в режиме реального времени………………….. 187

Архитектура микросервисов…………………………………………………….. 188

Как работает асинхронное программирование?………………………… 188

Цикл событий……………………………………………………………………………… 188

Корутины (сопрограммы или асинхронные функции)…………… 188

Задачи и фьючерсы……………………………………………………………………. 188

Пример программы: «Асинхронное выполнение»……………………….. 189

Основы asyncio……………………………………………………………………………………….. 189

Синтаксис async……………………………………………………………………………… 190

Синтаксис await……………………………………………………………………………… 190

Структура программы asyncio………………………………………………………. 190

Пример программы: «Интеграция библиотеки asyncio в приложение для университета»             191

Разработка асинхронных веб-приложений…………………………………………. 192

Пример программы: «Асинхронное университетское
приложение»……………………………………………………………………………………. 193

Настройка и установка……………………………………………………………… 193

Определение конечных точек асинхронной связи………………….. 193

Асинхронный доступ к базам данных………………………………………………….. 194

Описание асинхронного доступа к базам данных………………………. 194

Настройка и установка………………………………………………………………….. 195

Интеграция асинхронных операций с базами данных
в веб-фреймворке FastAPI………………………………………………………………. 195

Конфигурация…………………………………………………………………………….. 195

Функции асинхронной базы данных……………………………………….. 196

Использование асинхронных функций в маршрутах…………….. 197

Внедрение веб-сокетов…………………………………………………………………………… 197

WebSocket — что это?……………………………………………………………………. 197

Реализация WebSocket в FastAPI…………………………………………………… 198

Настройка и базовая конечная точка WebSocket…………………… 198

Установка FastAPI и Uvicorn…………………………………………………….. 199

Определение конечной точки WebSocket………………………………… 199

Обновление записей в режиме реального времени…………………. 199

Сохранение соединений WebSocket………………………………………… 200

Интеграция с процессом регистрации……………………………………… 200

Передовой опыт и шаблоны Async……………………………………………………….. 201

Обработка ошибок в асинхронном коде………………………………………. 201

Пример программы: «Корректная обработка ошибок базы данных»             201

Управление параллельными процессами и отмена задач………….. 202

Пример программы: «Отмена устаревших запросов
к базе данных»……………………………………………………………………………. 202

Использование менеджеров контекста для управления ресурсами 203

Пример программы: «Асинхронный менеджер контекста для подключения к базе данных»  203

Разделение и модульное построение кода…………………………………… 203

Пример программы: «Модульная обработка WebSocket»…….. 203

Отладка асинхронных приложений……………………………………………………… 204

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

Пример программы: «Ведение подробного журнала»…………… 205

Пример программы: «Использование сообщений print для получения немедленной обратной связи»               205

Пример программы: «Включение режима отладки asyncio»…. 206

Резюме……………………………………………………………………………………………………… 207

ГЛАВА 7. Организация работы с пользователями
и их безопасность……………………………………………………………. 209

Введение………………………………………………………………………………………………….. 209

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

Определение требований……………………………………………………………….. 210

Компоненты системы аутентификации пользователей………………. 211

Пример программы: «Подключение аутентификации пользователей» 212

Реализация стандартов OAuth и JWT…………………………………………………… 213

Введение в OAuth……………………………………………………………………………. 213

Введение в веб-токены JSON (JWT)……………………………………………….. 214

Пример программы: «Реализация OAuth и JWT»…………………………. 214

Настройка OAuth с помощью провайдера………………………………. 214

Интеграция OAuth в приложение……………………………………………… 215

Реализация JWT для управления сеансами…………………………….. 215

Контроль доступа на основе ролей (RBAC)………………………………………… 216

Определение эффективности RBAC……………………………………………… 216

Пример программы: «Внедрение RBAC»……………………………………… 217

Определение ролей и разрешений……………………………………………. 217

Настройка среды……………………………………………………………………….. 217

Определение моделей пользователей и ролей………………………… 218

Создание ролей………………………………………………………………………….. 218

Назначение ролей пользователям……………………………………………. 218

Обеспечение проверки ролей……………………………………………………. 219

Обеспечение безопасности REST API………………………………………………….. 219

Что необходимо для обеспечения безопасности REST API?……… 219

Стратегии обеспечения безопасности REST API………………………… 220

Использование HTTPS………………………………………………………………. 220

Аутентификация и авторизация……………………………………………….. 220

Валидация и дезинфекция входных данных……………………………. 221

Внедрение ограничения скорости……………………………………………. 222

Управление сеансами пользователей…………………………………………………… 222

Основные понятия…………………………………………………………………………… 222

Реализация безопасного управления сеансами…………………………… 223

Создание и обработка сеансов…………………………………………………. 223

Сохранение сеансов………………………………………………………………….. 224

Истечение срока действия сеанса…………………………………………….. 224

Обслуживание и безопасность сеансов…………………………………… 224

Внедрение двухфакторной аутентификации……………………………………….. 225

Описание двухфакторной аутентификации…………………………………. 225

Шаги по внедрению 2FA………………………………………………………………… 226

Генерация секретного ключа для пользователя……………………… 226

Связывание секретного ключа с приложением Authenticator… 227

Проверка TOTP во время входа в систему……………………………….. 227

Интеграция 2FA в процесс входа в систему…………………………….. 227

Резюме……………………………………………………………………………………………………… 228

ГЛАВА 8. Развертывание внутренних приложений, написанных на языке Python          230

Введение………………………………………………………………………………………………….. 230

Обзор Docker и контейнеров………………………………………………………………….. 231

Описание контейнерной технологии…………………………………………….. 231

Роль Docker в контейнеризации…………………………………………………….. 231

Доминирующее положение Docker……………………………………………….. 232

Пример программы: «Использование Docker»…………………………….. 233

Использование Docker для приложений, написанных на языке Python 234

Установка Docker……………………………………………………………………………. 234

Контейнеризация университетского приложения……………………….. 236

Подготовка приложения……………………………………………………………. 236

Создание Dockerfile……………………………………………………………………. 236

Сборка образа Docker……………………………………………………………….. 237

Запуск контейнера Docker………………………………………………………… 237

Kubernetes для управления приложениями………………………………………….. 237

Описание Kubernetes………………………………………………………………………. 238

Установка и настройка Kubernetes……………………………………………….. 238

Установка Minikube…………………………………………………………………… 238

Установка kubectl………………………………………………………………………. 239

Развертывание университетского приложения на Kubernetes……. 239

Создание конфигурации развертывания…………………………………. 239

Развертывание приложения………………………………………………………. 240

Открытие приложения……………………………………………………………….. 240

Доступ к приложению……………………………………………………………….. 240

CI/CD для внутренних приложений на Python……………………………………. 241

Основные принципы работы CI/CD……………………………………………… 241

Использование CI/CD для университетского приложения…………. 241

Настройка контроля версий……………………………………………………… 241

Выбор инструмента CI/CD……………………………………………………….. 242

Использование Nginx в качестве обратного прокси-сервера……………… 244

Функция Nginx…………………………………………………………………………………. 244

Установка и настройка Nginx………………………………………………………… 245

Установка Nginx…………………………………………………………………………. 245

Настройка Nginx в качестве обратного прокси-сервера………… 245

SSL-сертификаты и настройка HTTPS…………………………………………………. 247

Описание SSL/TLS и HTTPS………………………………………………………….. 247

Генерация SSL-сертификатов………………………………………………………… 247

Установка Certbot………………………………………………………………………. 248

Получение сертификата……………………………………………………………. 248

Проверка установки SSL-сертификата…………………………………….. 248

Конфигурация HTTPS в Nginx……………………………………………………….. 248

Масштабирование приложений на Python………………………………………….. 249

Необходимость масштабирования……………………………………………….. 249

Горизонтальное и вертикальное масштабирование…………………… 250

Горизонтальное масштабирование (масштабирование наружу/внутрь)       250

Вертикальное масштабирование (масштабирование вверх/вниз) 250

Реализация масштабирования в Kubernetes…………………………………. 250

Определение запросов и лимитов ресурсов…………………………….. 251

Настройка горизонтального автоматического масштабирования подсистем             252

Контроль масштабирования…………………………………………………….. 253

Резюме……………………………………………………………………………………………………… 253

ГЛАВА 9. Микросервисы и интеграция с облаком…………….. 255

Введение………………………………………………………………………………………………….. 255

Проектирование и разработка микросервисов с помощью Python……. 256

Разбиение приложения на микросервисы…………………………………….. 257

Определение границ сервисов……………………………………………………….. 257

Создание независимых сред………………………………………………………….. 257

Разработка API для межсервисного взаимодействия………………….. 258

Упаковка сервисов в контейнеры………………………………………………….. 258

Управление микросервисами с помощью Docker и Kubernetes………….. 259

Контейнеризация с помощью Docker……………………………………………. 259

Упаковка каждого микросервиса в контейнер………………………… 260

Организация работы с помощью Kubernetes……………………………….. 260

Создание развертываний Kubernetes……………………………………….. 261

Управление сервисами с помощью Kubernetes Services…………. 261

Развертывание приложений Python на AWS……………………………………….. 262

Настройка AWS для университетского приложения…………………… 262

Создание учетной записи AWS………………………………………………… 262

Настройка IAM (управление идентификацией и доступом)….. 263

Настройка AWS CLI………………………………………………………………….. 263

Развертывание приложения на AWS…………………………………………….. 264

Вариант 1: использование Elastic Beanstalk……………………………. 264

Вариант 2: использование EC2………………………………………………… 264

Использование бессерверных архитектур с AWS Lambda………………… 265

Описание AWS Lambda…………………………………………………………………. 265

Установка AWS Lambda………………………………………………………………… 266

Подготовка приложения……………………………………………………………. 266

Создание функции Lambda в AWS…………………………………………… 267

Реализация gRPC для взаимодействия микросервисов……………………….. 268

Зачем нужен gRPC………………………………………………………………………….. 268

Реализация gRPC в микросервисах на Python……………………………… 269

Определение сервиса с помощью буферов протокола…………… 269

Создание кода сервера и клиента…………………………………………….. 270

Реализация сервиса на Python………………………………………………….. 270

Создание клиента………………………………………………………………………. 271

Резюме……………………………………………………………………………………………………… 271

ГЛАВА 10. Брокеры сообщений и асинхронная обработка задач 273

Введение………………………………………………………………………………………………….. 273

Обзор брокеров сообщений…………………………………………………………………… 274

Роль брокеров сообщений во внутренних приложениях…………….. 274

Redis как брокер сообщений………………………………………………………….. 275

Каким образом Redis обеспечивает обмен сообщениями?…….. 275

Интеграция Kafka для обработки данных в реальном времени………… 277

Описание Apache Kafka…………………………………………………………………. 277

Основные компоненты Kafka………………………………………………………… 277

Интеграция Kafka для обработки данных в режиме
реального времени………………………………………………………………………….. 278

Установка и настройка Kafka………………………………………………….. 278

Создание тем………………………………………………………………………………. 278

Реализация производителей и потребителей Kafka……………….. 278

Асинхронная обработка задач с помощью Celery………………………………. 280

Знакомство с асинхронной обработкой задач…………………………….. 280

Использование Celery для асинхронной обработки задач…………. 280

Как работает Celery?…………………………………………………………………. 281

Использование Celery…………………………………………………………………….. 281

Установка Celery и Redis…………………………………………………………… 281

Настройка Celery……………………………………………………………………….. 281

Запуск Celery Worker…………………………………………………………………. 282

Постановка задач в очередь……………………………………………………… 282

RabbitMQ как альтернативный брокер сообщений…………………………….. 282

Описание RabbitMQ и принцип его работы…………………………………. 283

Интеграция RabbitMQ……………………………………………………………………. 283

Установка RabbitMQ…………………………………………………………………. 284

Настройка RabbitMQ в приложении………………………………………… 284

Отправка сообщений…………………………………………………………………. 285

Резюме……………………………………………………………………………………………………… 285

Эпилог………………………………………………………………………….. 287

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

Встречайте: “Современные фронтенды на базе HTMX”

Современные фронтенды на базе HTMX

Рассмотрены практические подходы к созданию современных динамичных веб-интерфейсов и веб-приложений с использованием HTMX — технологии, позволяющей строить интерактивные приложения на основе HTML с минимальным объемом JavaScript- кода. Подробно описаны принципы работы с HTMX в связке с Java, Spring Boot и Thymeleaf. Показаны базовые приемы замены DOM-элементов с использованием различных триггеров, работа с запросами и заголовками, а также использование библиотеки htmx-spring-boot. Рассказано, как использовать замены Out Of Band. Описаны способы реализации современных UI-паттернов, таких как ленивая загрузка, активный поиск, бесконечная прокрутка и валидация форм в реальном времени. Рассматриваются возможности подключения веб-компонентов и усиления клиентской логики с помощью JavaScript и библиотеки Alpine.js. Описано, как обеспечить безопасность веб-приложений на HTMX, как обрабатывать события, отправляемые сервером, и использовать веб-сокеты.

Создание динамичных и интерактивных веб-интерфейсов больше не требует сложного программирования на JavaScript. Благодаря технологии HTMX — революционному подходу к фронтенд-разработке — вы можете строить мощные веб-приложения, используя минимум скриптов и привычный HTML. Эта книга поможет вам освоить HTMX в связке с Java, Spring Boot и Thymeleaf, изменив ваше представление о веб-разработке.
Автор последовательно вводит в основы работы с HTMX — от простых механизмов замены DOM-элементов с использованием различных триггеров до полноценной интеграции с контроллерами Spring Boot. Показаны современные UI-паттерны: ленивая загрузка, активный поиск, бесконечная прокрутка, валидация форм в реальном времени и другие. Рассматриваются возможности использования веб-фреймворков и компонентов JavaScript для усиления интерактивности на стороне клиента.

Вы узнаете:

• Как устроен синтаксис HTMX: триггеры, цели, замены
• Как работать с заголовками запросов и ответов
• Как использовать библиотеку htmx-spring-boot
• Что такое замены Out Of Band и зачем они нужны
• Как использовать JavaScript и библиотеку Alpine.js вместе с HTMX
• Как обеспечить безопасность приложений на HTMX
• Как реализовать ленивую загрузку, бесконечную прокрутку и активный поиск
• Как выполнять валидацию форм в реальном времени
• Как интегрировать HTMX с веб-компонентами и обмениваться данными в реальном времени
• Как обрабатывать события, отправляемые сервером, и использовать веб-сокеты

Книгу “Современные фронтенды на базе HTMX” можно купить в нашем интенет-магазине.

Напутственное слово……………………………………………………………………………….. 9

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

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

ГЛАВА 1. Используемые методы……………………………………………………………. 15

1.1. HTMX…………………………………………………………………………………………………………………………………… 15

1.2. Spring Boot……………………………………………………………………………………………………………………………. 16

1.3. Spring Framework…………………………………………………………………………………………………………………. 16

1.4. Thymeleaf…………………………………………………………………………………………………………………………….. 17

1.5. Alpine……………………………………………………………………………………………………………………………………. 17

1.6. Tailwind CSS…………………………………………………………………………………………………………………………. 18

ГЛАВА 2. Начало работы………………………………………………………………………. 19

2.1. Предварительные настройки……………………………………………………………………………………………… 19

2.1.1. macOS/Linux………………………………………………………………………………………………………………. 19

2.1.2. Windows……………………………………………………………………………………………………………………… 20

2.2. Инструмент ttcli…………………………………………………………………………………………………………………… 20

2.2.1. Суть вопроса……………………………………………………………………………………………………………… 20

2.2.2. Установка…………………………………………………………………………………………………………………… 21

2.2.3. Генерация проекта……………………………………………………………………………………………………. 21

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

2.3. Плагины IntelliJ IDEA………………………………………………………………………………………………………….. 26

2.4. Краткие выводы………………………………………………………………………………………………………………….. 27

ГЛАВА 3. Начало работы с HTMX…………………………………………………………. 29

3.1. Пример «Hello World»………………………………………………………………………………………………………….. 29

3.2. Триггеры………………………………………………………………………………………………………………………………. 34

3.2.1. Модификаторы триггеров………………………………………………………………………………………… 34

3.2.2. Фильтры триггеров……………………………………………………………………………………………………. 35

3.2.3. Особые события………………………………………………………………………………………………………… 35

3.2.4. Пример……………………………………………………………………………………………………………………….. 37

3.3. Цели……………………………………………………………………………………………………………………………………… 43

3.4. Замена………………………………………………………………………………………………………………………………….. 43

3.5. HTTP-глаголы……………………………………………………………………………………………………………………… 47

3.6. Краткие выводы………………………………………………………………………………………………………………….. 47

ГЛАВА 4. Заголовки запроса/ответа………………………………………………………. 49

4.1. Заголовки запроса………………………………………………………………………………………………………………. 49

4.2. Заголовки ответа…………………………………………………………………………………………………………………. 51

4.3. Библиотека htmx-spring-boot……………………………………………………………………………………………… 52

4.4. Краткие выводы………………………………………………………………………………………………………………….. 55

ГЛАВА 5. Проект 1: TodoMVC……………………………………………………………….. 57

5.1. Начальная реализация……………………………………………………………………………………………………….. 57

5.2. Усиление приложения………………………………………………………………………………………………………… 69

5.3. Тонкая реализация HTMX…………………………………………………………………………………………………. 70

5.3.1. Добавление нового элемента todo…………………………………………………………………………… 70

5.3.2. Обновление количества пунктов……………………………………………………………………………… 74

5.3.3. Пометка пункта как завершенного………………………………………………………………………….. 77

5.3.4. Удаление пункта……………………………………………………………………………………………………….. 79

5.4. Краткие выводы………………………………………………………………………………………………………………….. 81

ГЛАВА 6. Замена Out Of Band………………………………………………………………… 83

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

6.2. Пример…………………………………………………………………………………………………………………………………. 84

6.2.1. Генерация проекта……………………………………………………………………………………………………. 84

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

6.2.3. Настройка пользовательского интерфейса…………………………………………………………….. 88

6.2.4. Ввод продолжительности регистрации времени……………………………………………………. 91

6.2.5. Итоги дня……………………………………………………………………………………………………………………. 95

6.3. Краткие выводы………………………………………………………………………………………………………………….. 97

ГЛАВА 7. Скрипт на стороне клиента……………………………………………………. 99

7.1. Vanilla JavaScript…………………………………………………………………………………………………………………. 99

7.1.1. Конфигурация проекта…………………………………………………………………………………………… 100

7.1.2. Программный интерфейс Numbers………………………………………………………………………… 100

7.1.3. Веб-интерфейс…………………………………………………………………………………………………………. 103

7.1.4. Индикатор выполнения…………………………………………………………………………………………… 105

7.1.5. Обработка ошибок………………………………………………………………………………………………….. 107

7.2. Alpine.js………………………………………………………………………………………………………………………………. 112

7.2.1. Настройка проекта…………………………………………………………………………………………………. 112

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

7.2.3. Встроенное редактирование краткого содержания проблемы…………………………… 121

7.2.3.1. Визуальная индикация………………………………………………………………………………. 121

7.2.3.2. Реализация технологии Happy Flow…………………………………………………………. 122

7.2.3.3. Реализация отмены потока (cancel flow)………………………………………………….. 127

7.2.3.4. Обработка ошибок……………………………………………………………………………………… 131

7.2.4. Использование технологии drag-and-drop…………………………………………………………….. 133

7.3. Краткие выводы………………………………………………………………………………………………………………… 140

ГЛАВА 8. Безопасность………………………………………………………………………… 141

8.1. HTMX и безопасность………………………………………………………………………………………………………. 141

8.2. Закладки…………………………………………………………………………………………………………………………….. 141

8.2.1. Инициализация проекта…………………………………………………………………………………………. 141

8.2.2. Добавление Spring Security……………………………………………………………………………………… 142

8.3. Классическая настройка Thymeleaf……………………………………………………………………………….. 143

8.4. Добавление закладки с помощью HTMX……………………………………………………………………….. 149

8.5. Удаление закладки……………………………………………………………………………………………………………. 151

8.5.1. Удаление с помощью скрытого ввода…………………………………………………………………… 153

8.5.2. Удаление с помощью метатегов…………………………………………………………………………….. 153

8.5.3. Удаление с помощью встроенного синтаксиса Thymeleaf для JavaScript…………. 154

8.6. Обработка выхода из системы………………………………………………………………………………………… 156

8.7. Краткие выводы………………………………………………………………………………………………………………… 157

ГЛАВА 9. Проект 2: приложение для работы с контактами…………………. 159

9.1. Настройка проекта…………………………………………………………………………………………………………… 159

9.2. Добавление контакта……………………………………………………………………………………………………….. 167

9.3. Поиск………………………………………………………………………………………………………………………………….. 174

9.4. Просмотр контакта…………………………………………………………………………………………………………… 176

9.5. Редактирование и удаление контакта…………………………………………………………………………….. 179

9.6. Удаление с помощью HTMX……………………………………………………………………………………………. 185

9.7. Встроенная проверка наличия дубликатов адресов электронной почты…………………… 188

9.7.1. Реализация пользовательского валидатора…………………………………………………………. 188

9.7.2. Триггер валидации в процессе ввода…………………………………………………………………….. 191

9.7.3. Улучшение пользовательского опыта…………………………………………………………………… 193

9.7.4. Использование hx-validate для предотвращения лишних запросов…………………… 196

9.8. Пагинация………………………………………………………………………………………………………………………….. 196

9.8.1. Генерация контактов с помощью Datafaker…………………………………………………………. 197

9.8.2. Ручная пагинация……………………………………………………………………………………………………. 197

9.8.3. Шаблон «Click to load»……………………………………………………………………………………………. 201

9.8.4. Бесконечная прокрутка………………………………………………………………………………………….. 202

9.9. Активный поиск…………………………………………………………………………………………………………………. 203

9.9.1. Пагинация поиска……………………………………………………………………………………………………. 203

9.9.2. Поиск по типу………………………………………………………………………………………………………….. 205

9.10. Удаление строки из списка…………………………………………………………………………………………….. 207

9.10.1. Настройка перенаправления кнопки Delete……………………………………………………….. 210

9.11. Архивация списка контактов…………………………………………………………………………………………. 211

9.11.1. Архиватор……………………………………………………………………………………………………………… 211

9.11.2. Создание архива…………………………………………………………………………………………………… 215

9.11.3. Ссылка на скачивание………………………………………………………………………………………….. 217

9.12. Краткие выводы………………………………………………………………………………………………………………. 220

ГЛАВА 10. Веб-компоненты…………………………………………………………………. 221

10.1. Что такое веб-компоненты?……………………………………………………………………………………………. 221

10.2. Интеграция Shoelace……………………………………………………………………………………………………….. 221

10.3. Дерево GitHub…………………………………………………………………………………………………………………. 222

10.3.1. API GitHub……………………………………………………………………………………………………………. 222

10.3.2. Реализация ленивой загрузки…………………………………………………………………………….. 226

10.3.3. Добавление релизов репозитория……………………………………………………………………… 229

10.3.4. Отображение примечаний к релизу…………………………………………………………………… 230

10.4. Краткие выводы………………………………………………………………………………………………………………. 233

ГЛАВА 11. События, отправляемые сервером, и веб-сокеты………………… 235

11.1. События, отправляемые сервером………………………………………………………………………………… 235

11.1.1. Что такое «события, отправляемые сервером»?………………………………………………. 235

11.1.2. Использование расширения HTMX SSE…………………………………………………………… 235

11.1.2.1. Настройка проекта………………………………………………………………………………. 235

11.1.2.2. Загрузка файла…………………………………………………………………………………….. 238

11.1.2.3. Отображение обрабатываемых строк……………………………………………….. 241

11.1.2.4. Отображение индикатора хода выполнения…………………………………….. 246

11.1.2.5. Проверка активности подключения……………………………………………………. 249

11.2. Веб-сокеты………………………………………………………………………………………………………………………. 252

11.2.1. Что такое веб-сокеты?………………………………………………………………………………………… 252

11.2.2. Использование расширения HTMX WS……………………………………………………………. 252

11.2.2.1. Настройка проекта………………………………………………………………………………. 252

11.2.2.2. Отправка HTML-кода обратно с помощью шаблонов Thymeleaf….. 258

11.3. Краткие выводы………………………………………………………………………………………………………………. 261

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

ПРИЛОЖЕНИЕ. Журнал изменений……………………………………………………. 265

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

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

Новинка: “Web API. Сборник рецептов”

Web API. Сборник рецептов

Книга посвящена разработке современных веб-приложений с использованием JavaScript и встроенных возможностей браузера на основе Web API. Приведены практические примеры реализации функций, которые ранее требовали сторонних плагинов: диалоговые окна, работа с геолокацией и другими возможностями, предоставляемыми браузером. Освещаются как устоявшиеся, так и находящиеся в стадии разработки API-интерфейсы, позволяющие создавать мощные и интерактивные веб-приложения, глубоко интегрированные с устройствами пользователей. Рассматривается, как браузеры реализуют модель разрешений для предоставления доступа к таким функциям, как геолокация и push-уведомления. Каждая задача в книге сопровождается готовыми рецептами, содержащими описание проблемы, решение с пояснениями и расширенное обсуждение. Книга ориентирована на программистов с опытом работы на JavaScript, знакомых с программным интерфейсом DOM (Document Object Model).

Для программистов

Повысьте уровень JavaScript-приложений

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

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

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

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

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

Книгу “Web API. Сборник рецептов: Повысьте уровень JavaScript-приложений” можно купить в нашем интенет-магазине.

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

Возможности современных браузеров. 14

Недостатки сторонних библиотек. 14

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

Что содержится в этой книге. 15

Дополнительные ресурсы.. 15

Соглашения об используемых обозначениях. 16

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

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

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

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

ГЛАВА 1. Асинхронные API. 21

1.0. Введение. 21

1.1. Работа с промисами. 22

1.2. Загрузка изображения с помощью использования резервного изображения (fallback) 24

1.3. Связывание промисов. 26

1.4. Использование ключевых слов  async и await 28

1.5. Параллельное использование промисов. 29

1.6. Анимация элемента с помощью  requestAnimationFrame. 30

1.7. Обертывание событий API в промис. 33

ГЛАВА 2. Простое сохранение данных с помощью Web Storage API. 36

2.0. Введение. 36

2.1. Проверка поддержки Web Storage. 38

2.2. Сохранение строковых данных. 39

2.3. Сохранение простых объектов. 40

2.4. Сохранение сложных объектов. 41

2.5. Отслеживание изменений в хранилище. 46

2.6. Поиск всех известных ключей. 47

2.7. Удаление данных. 49

ГЛАВА 3. URL-адреса и маршрутизация. 51

3.0. Введение. 51

3.1. Определение относительного URL-адреса. 52

3.2. Удаление параметров запроса из URL-адреса. 54

3.3. Добавление параметров запроса к URL-адресу. 56

3.4. Чтение параметров запроса. 58

3.5. Создание простого маршрутизатора  на стороне клиента. 60

3.6. Сопоставление URL-адресов с шаблонами. 62

ГЛАВА 4. Сетевые запросы.. 65

4.0. Введение. 65

4.1. Отправка запроса с помощью XMLHttpRequest 66

4.2. Отправка GET-запроса с помощью Fetch API 67

4.3. Отправка POST-запроса с помощью Fetch API 69

4.4. Загрузка файла с помощью Fetch API 70

4.5. Отправка Beacon. 71

4.6. Прослушивание удаленных событий  с помощью server-sent events. 72

4.7. Обмен данными с WebSockets  в режиме реального времени. 74

ГЛАВА 5. База данных IndexedDB.. 77

5.0. Введение. 77

5.1. Создание, чтение и удаление объектов  в базе данных. 79

5.2. Обновление существующей базы данных. 85

5.3. Выполнение запросов с использованием индексов. 87

5.4. Поиск строковых значений с помощью курсора. 90

5.5. Разбивка большого набора данных на страницы.. 92

5.6. Использование промисов  с IndexedDB API 94

ГЛАВА 6. Наблюдение за элементами DOM… 97

6.0. Введение. 97

6.1. Отложенная загрузка изображения при прокрутке. 99

6.2. Обертывание IntersectionObserver промисом.. 101

6.3. Автоматическая пауза при воспроизведении видео. 102

6.4. Анимация изменений высоты.. 103

6.5. Изменение содержимого элемента  в зависимости от размера. 105

6.6. Применение перехода  в момент появления элемента в поле зрения. 107

6.7. Использование режима бесконечной прокрутки. 108

ГЛАВА 7. Формы.. 110

7.0. Введение. 110

7.1. Заполнение поля формы из локального хранилища. 111

7.2. Отправка формы с помощью Fetch и FormData API 112

7.3. Отправка формы в формате JSON.. 114

7.4. Создание обязательного поля формы.. 116

7.5. Ограничения при вводе числа. 117

7.6. Определение шаблона валидации. 118

7.7. Валидация формы.. 119

7.8. Применение пользовательской логики валидации. 122

7.9. Проверка группы флажков. 124

7.10. Асинхронная проверка поля формы.. 127

ГЛАВА 8. API веб-анимации. 130

8.0. Введение. 130

8.1. Применение эффекта “пульсации”  при нажатии кнопки. 132

8.2. Запуск и остановка анимации. 135

8.3. Анимация вставки и удаления элементов DOM.. 136

8.4. Реверсирование анимации. 137

8.5. Отображение индикатора прокрутки. 141

8.6. Создание подпрыгивающего элемента. 143

8.7. Одновременный запуск нескольких анимаций. 144

8.8. Отображение анимации загрузки. 146

8.9. Соблюдение в анимации  предпочтений пользователя. 148

ГЛАВА 9. Web Speach API. 150

9.0. Введение. 150

9.1. Добавление продиктованного текста  в текстовое поле. 152

9.2. Создание Promise-помощника  для распознавания речи. 155

9.3. Получение доступных голосов. 156

9.4. Синтез речи. 157

9.5. Настройка параметров синтеза речи. 159

9.6. Автоматическая приостановка речи. 160

ГЛАВА 10. Работа с файлами. 161

10.0. Введение. 161

10.1. Загрузка текста из файла. 161

10.2. Загрузка изображения из URL-адреса данных. 164

10.3. Загрузка видео  в качестве URL-адреса объекта. 166

10.4. Загрузка изображения с помощью перетаскивания. 167

10.5. Проверка и запрос разрешений. 170

10.6. Экспорт данных API в файл. 171

10.7. Экспорт данных API со ссылкой  для скачивания. 173

10.8. Загрузка файла с помощью перетаскивания. 175

ГЛАВА 11. Интернационализация. 177

11.0. Введение. 177

11.1. Форматирование даты.. 178

11.2. Получение частей отформатированной даты.. 178

11.3. Форматирование относительной даты.. 179

11.4. Форматирование чисел. 181

11.5. Округление знаков после точки. 182

11.6. Форматирование ценового диапазона. 183

11.7. Форматирование единиц измерения. 184

11.8. Применение правил плюрализации. 184

11.9. Подсчет символов, слов и предложений. 186

11.10. Форматирование списков. 187

11.11. Сортировка массива имен. 188

ГЛАВА 12. Веб-компоненты.. 190

12.0. Введение. 190

12.1. Создание компонента  для отображения сегодняшней даты.. 193

12.2. Создание компонента  для форматирования пользовательской даты.. 194

12.3. Создание компонента обратной связи. 196

12.4. Создание компонента профильной карточки. 200

12.5. Создание компонента изображения  с отложенной загрузкой. 202

12.6. Создание компонента раскрытия информации. 204

12.7. Создание стилизованного компонента кнопки. 207

ГЛАВА 13. Элементы интерфейса пользователя. 211

13.0. Введение. 211

13.1. Создание диалогового окна  предупреждения. 212

13.2. Создание диалогового окна подтверждения. 215

13.3. Создание веб-компонента  диалогового окна подтверждения. 218

13.4. Использование элемента раскрытия информации. 220

13.5. Отображение всплывающего окна. 222

13.6. Ручное управление всплывающим окном.. 223

13.7. Позиционирование всплывающего окна  относительно элемента. 224

13.8. Отображение всплывающей подсказки. 227

13.9. Отображение уведомления. 229

ГЛАВА 14. Интеграция устройств. 231

14.0. Введение. 231

14.1. Считывание состояния батареи. 231

14.2. Считывание состояния сети. 234

14.3. Определение местоположения устройства. 235

14.4. Отображение местоположения устройства  на карте. 237

14.5. Копирование и вставка текста. 238

14.6. Совместное использование контента  с помощью Web Share API 241

14.7. Создание вибрации устройства. 242

14.8. Настройка ориентации устройства. 243

ГЛАВА 15. Измерение производительности. 245

15.0. Введение. 245

15.1. Измерение производительности загрузки страниц. 246

15.2. Измерение эффективности  использования ресурсов. 247

15.3. Поиск самых медленных ресурсов. 247

15.4. Определение тайминга для конкретного ресурса. 248

15.5. Профилирование производительности  рендеринга. 249

15.6. Профилирование многоэтапных задач. 251

15.7. Прослушивание показателей производительности. 253

ГЛАВА 16. Работа с консолью… 255

16.0. Введение. 255

16.1. Стилизации вывода консоли. 255

16.2. Использование уровней в журналах сообщений. 256

16.3. Создание именованных регистраторов. 257

16.4. Отображение массива объектов  в таблице. 258

16.5. Использование консольных таймеров. 260

16.6. Использование консольных групп. 261

16.7. Использование счетчиков. 263

16.8. Регистрация переменной и ее значения. 264

16.9. Протоколирование трассировки стека. 265

16.10. Проверка ожидаемых значений. 266

16.11. Изучение свойств объекта. 267

ГЛАВА 17. CSS. 269

17.0. Введение. 269

17.1. Выделение текстовых областей. 269

17.2. Предотвращение появления текста  без стилизации. 272

17.3. Анимация переходов DOM.. 274

17.4. Изменение таблиц стилей во время выполнения. 276

17.5. Условная установка CSS-класса. 277

17.6. Соответствие медиазапросам.. 277

17.7. Получение вычисленного стиля элемента. 278

ГЛАВА 18. Медиа. 281

18.0. Введение. 281

18.1. Запись экрана. 281

18.2. Захват изображения с камеры пользователя. 284

18.3. Захват видео с камеры пользователя. 286

18.4. Определение возможностей  системной поддержки медиа. 288

18.5. Применение видеофильтров. 290

ГЛАВА 19. Заключительные замечания. 292

19.0. Введение. 292

19.1. В защиту сторонних библиотек. 292

19.2. Определяйте функции, а не версии браузера. 292

19.3. Полифилы.. 293

19.4. Заглядывая в будущее. 293

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

Об авторе. 302

Об изображении на обложке. 303

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

Новинка: “Удэгейские сказки”

Удэгейские сказки

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

Ленивых и трусливых в сказках всегда проучат таёжные духи…

Удэгейские сказки

В Приморском крае, от реки Амур до берегов Японского моря живут удэгейцы — «лесной народ», как назвал их исследователь Дальнего Востока Владимир Арсеньев. Тайга для удэгейца — открытая книга, в которой он может прочитать не только следы животных, но и удивительные сказки. Самый почитаемый зверь в жизни и в сказках — это тигр, который может быть как защитником, так и опасным врагом. Ленивых и трусливых в сказках всегда проучат таёжные духи, а храбрым богатырям придут на помощь большие и маленькие обитатели леса.
«Тигр и человек», «Богатырь с Кедровой речки», «Как Удзя женился» — эти и другие сказки собрала и пересказала Юлия Шестакова, которая всю жизнь посвятила изучению фольклора народов Приморья и Дальнего Востока.

Художник

Жунина Анастасия

Анастасия Жунина родилась в Нижнем Новгороде. Закончила Нижегородское художественное училище. В 2015 году стала студенткой Санкт-Петербургского государственного академического института живописи, скульптуры и архитектуры им. Репина. Обучалась в монументальной мастерской профессора Александра Кировича Быстрова.

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

Вышла книга “Уральские сказы (2-е издание)”

Уральские сказы (2 издание)

Книга познакомит юных читателей со сказами известного уральского писателя Павла Петровича Бажова: «Серебряное копытце» и «Голубая змейка». В них быт уральских горнозаводских поселков тесно переплетается с фольклором края.

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

Невысокие уральские горы пересекают Россию почти посередине и делят на Европейскую и Азиатскую части, поэтому их называют “каменным поясом” страны. А еще в них много драгоценных камней и металлов. Уральцы давно научились добывать их и поставили здесь заводы. С тех пор стал Урал огромным металлургическим “цехом” России.

Неудивительно, что самый известный и любимый уральский писатель Павел Петрович Бажов писал о горах, драгоценных камнях и тех, кто их добывает. Павел Петрович вырос в Сысерти, старом рабочем поселке, в семье горного мастера. С детства слушал рассказы старших о нелёгком труде рабочих, об опасностях, которые их подстерегают в горе, и о встречах рудокопов и гранильщиков с “тайными силами”: Хозяйкой Медной горы или с голубой змейкой, которые иногда добры, а иногда и откровенно враждебны человеку.

Люди, природа, россыпи уральских самоцветов, описанные в сказах Бажова, – всё настоящее. А есть ли на самом деле “тайные тёмные силы”, мы не знаем. Может, и выдумка, но всё же страшновато.

Автор

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

Художник

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