Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Воган Ли - Python для хакеров (Библиотека программиста) - 2023.pdf
Скачиваний:
1
Добавлен:
07.04.2024
Размер:
14.76 Mб
Скачать

PYTHON ДЛЯ ХАКЕРОВ

Н Е Т Р И В И А Л Ь Н Ы Е З А Д А Ч И И П Р О Е К Т Ы

Л И В О Г А Н

2023

Ли Воган

Python для хакеров. Нетривиальные задачи и проекты

Перевел с английского Д. Брайт Научный редактор В. Кадочников

ББК 32.973.2-018.1 УДК 004.43

Воган Ли

В61 Python для хакеров. Нетривиальные задачи и проекты. — СПб.: Питер, 2023. — 384 с.: ил. — (Серия «Библиотека программиста»).

ISBN 978-5-4461-2968-3

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

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

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

16+ (В соответствии с Федеральным законом от 29 декабря 2010 г. № 436-ФЗ.)

ISBN 978-1718500624 англ.

© 2021 by Lee Vaughan. Real-World Python: A Hacker’s Guide to Solving

 

Problems with Code, ISBN 9781718500624, published by No Starch Press Inc.

 

245 8th Street, San Francisco, California United States 94103.

 

Russian edition published under license by No Starch Press Inc.

ISBN 978-5-4461-2968-3

© Перевод на русский язык ООО «Прогресс книга», 2023

 

© Издание на русском языке, оформление ООО «Прогресс книга», 2023

 

© Серия «Библиотека программиста», 2023

Права на издание получены по соглашению с No Starch Press. Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.

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

Изготовлено в России. Изготовитель: ООО «Прогресс книга». Место нахождения и фактический адрес: 194044, Россия, г. Санкт-Петербург, Б. Сампсониевский пр., д. 29А, пом. 52. Тел.: +78127037373. Дата изготовления: 03.2023. Наименование: книжная продукция. Срок годности: не ограничен. Налоговая льгота — общероссийский классификатор продукции ОК 034-2014, 58.11.12 — Книги печатные профессиональные, технические и научные.

Импортер в Беларусь: ООО «ПИТЕР М», 220020, РБ, г. Минск, ул. Тимирязева, д. 121/3, к. 214, тел./факс: 208 80 01. Подписано в печать 30.01.23. Формат 70×100/16. Бумага офсетная. Усл. п. л. 30,960. Тираж 1000. Заказ 0000.

Посвящается моему дяде, Кеннету П. Вогану. Ты всегда и везде нес свет

Оглавление

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

13

О научных редакторах...........................................

14

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

15

От издательства.................................................

16

Введение.....................................................

17

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

17

Почему Python?...............................................

18

План книги..................................................

18

Версия Python, платформа и IDE..............................

20

Установка Python...........................................

21

Запуск Python.............................................

22

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

24

Вперед!.....................................................

24

Глава 1. Спасение моряков с помощью теоремы Байеса...............

25

Теорема Байеса..............................................

26

Проект #1. Поиск и спасение...................................

29

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

31

Установка библиотек Python..................................

31

Код для теоремы Байеса....................................

34

Время сыграть.............................................

51

Итоги.......................................................

53

Дополнительная литература....................................

53

Усложняем проект. Более грамотный поиск ........................

54

Усложняем проект. Поиск лучшей стратегии с помощью MCS..........

54

Усложняем проект. Вычисление вероятности обнаружения............

54

Оглавление      7

Глава 2. Установление авторства с помощью стилометрии..............

57

Проект #2: «Собака Баскервилей», «Война миров»

 

и «Затерянный мир» ...........................................

58

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

58

Установка NLTK...........................................

60

Корпусы текстов...........................................

62

Код стилометрии...........................................

63

Итоги.......................................................

81

Дополнительная литература ....................................

81

Практический проект: охота на собаку Баскервилей с помощью

 

распределения...............................................

82

Практический проект: тепловая карта пунктуации...................

83

Усложняем проект: фиксирование частотности......................

84

Глава 3. Суммаризация текста с помощью обработки

 

естественного языка..............................................

85

Проект #3. У меня есть мечта... суммаризация речи!.................

86

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

87

Веб-скрапинг.............................................

87

Код для «У меня есть мечта»..................................

88

Проект #4. Суммаризация речи с помощью gensim..................

96

Установка gensim..........................................

97

Код для суммаризации речи «Заправляйте свою кровать».........

97

Проект #5. Суммаризация речи с помощью облака слов............

100

Модули Word Cloud и PIL...................................

102

Код для создания облака слов...............................

102

Итоги......................................................

109

Дополнительная литература...................................

109

Усложняем проект: ночные игры.................................

109

Усложняем проект: суммаризация суммаризаций..................

111

Усложняем проект: суммаризация повести........................

111

Усложняем проект: важно не только что ты говоришь, но и как!........

113

Глава 4. Отправка суперсекретных сообщений с помощью

 

книжного шифра...............................................

114

Одноразовый блокнот........................................

115

Шифр «Ребекка».............................................

117

8      Оглавление

 

Проект #6. Цифровой ключ к «Ребекке»..........................

118

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

119

Код для шифрования......................................

120

Отправка сообщений......................................

130

Итоги......................................................

131

Дополнительная литература...................................

131

Практический проект: составление графика символов..............

132

Практический проект: отправка секретов шифром времен

 

Второй мировой войны........................................

133

Глава 5. Поиск Плутона........................................

135

Проект #7. Воссоздание блинк-компаратора......................

136

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

138

Данные.................................................

138

Код блинк-компаратора....................................

139

Использование блинк-компаратора..........................

153

Проект #8. Обнаружение астрономических транзиентов путем

 

дифференцирования изображений..............................

155

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

156

Код для детектора транзиентов..............................

156

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

164

Итоги......................................................

164

Дополнительная литература...................................

164

Практический проект: представление орбитальной траектории.......

164

Практический проект: найди отличия.............................

165

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

166

Глава 6. Победа в лунной гонке с помощью «Аполлона-8»............

167

Цель миссии «Аполлон-8».....................................

168

Траектория свободного возврата............................

169

Задача трех тел..........................................

170

Проект #9. На Луну с «Аполлоном-8»!...........................

171

Использование модуля turtle................................

171

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

175

Код программы для расчета свободного возврата «Аполлона-8»...

176

Выполнение симуляции.....................................

192

Оглавление  

    9

Итоги......................................................

194

Дополнительная литература...................................

194

Практический проект: симуляция шаблона поисков.................

195

Практический проект: запусти меня!.............................

196

Практический проект: останови меня!............................

197

Усложняем проект: симуляция в истинном масштабе................

198

Усложняем проект: реальный «Аполлон-8»........................

198

Глава 7. Выбор мест высадки на Марсе............................

199

Посадка на Марс............................................

199

Карта MOLA................................................

201

Проект #10. Выбор посадочных мест на Марсе....................

202

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

202

Код для выбора мест посадки...............................

204

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

222

Итоги......................................................

224

Дополнительная литература...................................

224

Практический проект: убедимся, что рисунки становятся частью

 

изображения................................................

225

Практический проект: визуализация профиля высот................

225

Практический проект: отображение в 3D.........................

226

Практический проект: совмещение карт..........................

227

Усложняем проект: три в одном.................................

229

Усложняем проект: перенос прямоугольников......................

230

Глава 8. Обнаружение далеких экзопланет.........................

231

Транзитная фотометрия.......................................

232

Проект #11. Симуляция транзита экзопланеты.....................

234

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

235

Код для транзита..........................................

235

Эксперименты с транзитной фотометрией.....................

242

Проект #12. Получение изображений экзопланет..................

245

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

245

Код для пикселизатора.....................................

247

Итоги......................................................

253

Дополнительная литература...................................

253

10      Оглавление

 

Практический проект: обнаружение инопланетных мегаструктур......

254

Практический проект: обнаружение транзита астероидов...........

256

Практический проект: добавление эффекта потемнения к краю.......

258

Практический проект: обнаружение пятен на звездах...............

260

Практический проект: обнаружение инопланетной армады..........

261

Практический проект: обнаружение планеты с Луной...............

262

Практический проект: измерение продолжительности

 

экзопланетного дня...........................................

262

Усложняем проект: генерация динамической кривой блеска..........

263

Глава 9. Как различить своих и чужих.............................

264

Обнаружение лиц на фотографиях..............................

264

Проект #13. Программирование робота-часового.................

266

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

269

Код....................................................

269

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

282

Обнаружение лиц в видеопотоке................................

283

Итоги......................................................

287

Дополнительная литература...................................

287

Практический проект: размытие лиц.............................

288

Усложняем проект: обнаружение кошачьих мордочек...............

289

Глава 10. Ограничение доступа по принципу распознавания лиц.......

290

Распознавание лиц с помощью LBPH.............................

290

Схема распознавания лиц..................................

291

Извлечение гистограмм локальных бинарных шаблонов..........

293

Проект #14. Ограничение доступа к инопланетному артефакту.......

296

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

296

Поддержка модулей и файлов...............................

296

Код для захвата видео.....................................

297

Код для обучения алгоритма распознавания лиц................

302

Код для прогнозирования лиц...............................

305

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

308

Итоги......................................................

309

Дополнительная литература ...................................

309

Усложняем проект: добавление пароля и видеозахвата..............

310

Оглавление    

11

Усложняем проект: похожие лица и близнецы......................

311

Усложняем проект: машина времени.............................

311

Глава 11. Создание интерактивной карты побега от зомби.............

312

Проект #15. Визуализация плотности населения с помощью

 

хороплетной карты...........................................

312

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

314

Библиотека анализа данных................................

315

Библиотеки bokeh и holoviews...............................

317

Установка pandas, bokeh и holoviews.........................

318

Работа с данными по уровню безработицы и плотности населения

 

в округах и штатах........................................

318

Разбираем код holoviews...................................

320

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

323

Планирование маршрута...................................

332

Итоги......................................................

336

Дополнительная литература ...................................

336

Усложняем проект: отображение на карте изменения численности

 

населения США.............................................

337

Глава 12. Находимся ли мы в компьютерной симуляции?..............

338

Проект #16. Жизнь, Вселенная и пруд черепахи Йертл..............

339

Код симуляции пруда......................................

339

Следствия симуляции пруда.................................

342

Измерение затрат на пересечение строк или столбцов сетки......

344

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

347

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

348

Итоги......................................................

349

Дополнительная литература ...................................

349

Дополнение.................................................

350

Усложняем проект: поиск безопасного места в космосе.............

350

Усложняем проект: а вот и Солнце...............................

351

Усложняем проект: взгляд глазами собаки........................

351

Усложняем проект: кастомизированный поиск слов.................

351

Усложняем проект: оптимизация праздничного показа слайдов.......

352

Усложняем проект: что за сложную паутину мы плетем..............

352

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

352

12      Оглавление

 

Решения для практических проектов.........................

353

Глава 2. Определение авторства с помощью стилометрии...........

353

Охота на собаку Баскервилей с помощью распределения........

353

Тепловая карта пунктуации.................................

354

Глава 4. Отправка суперсекретных сообщений с помощью

 

книжного шифра.............................................

355

Составление графика символов.............................

355

Отправка секретов шифром времен Второй мировой войны......

356

Глава 5. Поиск Плутона.......................................

359

Представление орбитальной траектории......................

359

В чем разница?...........................................

360

Глава 6. Победа в лунной гонке с помощью «Аполлона-8»...........

362

Симуляция шаблона поисков................................

362

Заведи меня!.............................................

363

Останови меня!...........................................

366

Глава 7. Выбор мест высадки на Марсе...........................

368

Убеждаемся, что рисунки становятся частью изображения........

368

Визуализация профиля высоты..............................

368

Отображение в 3D........................................

369

Совмещение карт.........................................

370

Глава 8. Обнаружение далеких экзопланет.......................

374

Обнаружение инопланетных мегаструктур.....................

374

Обнаружение транзита астероидов..........................

375

Добавление эффекта потемнения к краю......................

377

Обнаружение инопланетной армады.........................

378

Обнаружение планеты с Луной..............................

379

Измерение продолжительности экзопланетного дня.............

382

Глава 9. Как различить своих и чужих............................

383

Размытие лиц............................................

383

Глава 10. Ограничение доступа по принципу распознавания лиц......

383

Усложняем проект: добавление пароля и видеозахвата...........

383

Об авторе

Ли Воган — программист, поклонник поп-культуры, консультант, автор книги «Impractical Python Projects»1 (No Starch Press, 2018). За десятилетия работы научным руководителем в компании ExxonMobil он занимался проектированием и анализом компьютерных моделей, разрабатывал и тестировал программное обеспечение и, кроме того, обучал геофизиков и инженеров.

Обе свои книги, «Непрактичный Python» и «Python для хакеров», он написал для тех, кто самостоятельно изучает Python и хочет отточить свое мастерство, выполняя увлекательные и нетривиальные проекты.

1 «Непрактичный Python. Занимательные проекты для тех, кто хочет поумнеть».

О научных редакторах

Крис Крен (Chris Kren) окончил Университет Южной Алабамы со степенью магистра в сфере информационных систем. Сейчас он занимается кибербезопасностью и часто использует Python для отчетов, анализа данных и автоматизации.

Эрик Тодд Мортенсон (Eric Todd Mortenson) получил докторскую степень по математике в Висконсинском университете в Мадисоне. Он занимался исследованиями и преподаванием в Университете штата Пенсильвания, Университете Квинсленда, а также в Математическом институте Макса Планка. Сейчас он работает доцентом на факультете математики и компьютерных наук в СанктПетербургском государственном университете.

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

Команда No Starch Press работала над книгой во время пандемии — и совершила очередной трудовой подвиг. Их можно смело назвать профессионалами,­ которым нет равных, и эта книга появилась на свет лишь благодаря их усилиям. Выражаю всем сотрудникам свою глубочайшую признательность и уважение.

Также благодарю Криса Крена и Эрика Эвенчика (Eric Evenchick) за их ревью кода, Джозефа Б. Пола (Joseph B. Paul), Сару и Лору Воган — за их энтузиазм в косплее, а также Ханну Воган — за полезные фотографии.

Отдельное спасибо Эрику Т. Мортенсону за его подробную научную рецензию, содержащую множество полезных идей и дополнений. Эрик предложил добавить главу, посвященную байесовскому правилу, и предоставил множество практических проектов, а также дополнительных задач, включая применение к байесовским моделям методов Монте-Карло, подведение итогов романа по главам, моделирование взаимосвязей между Луной и «Аполлоном-8», просмотр Марса в 3D, вычисление кривой блеска для экзопланеты, обладающей луной, и некоторые другие. Благодаря его усилиям эта книга стала намного лучше.

В завершение выражаю благодарность участникам с ресурса stackoverflow.com. Одна из лучших особенностей Python заключается в его обширном и многогранном сообществе пользователей. Неважно, какой вопрос у вас возникнет, кто-нибудь на него обязательно ответит. Неважно, насколько странную задачу вы решаете, кто-нибудь наверняка уже делал что-то подобное. И всех этих людей вы можете найти на Stack Overflow.

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу comp@piter.com (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.