Книга Тиаго Антао «Сверхбыстрый Python»

Недавно дочитал книгу Тиаго Антао, которая в русскоязычном варианте называется «Сверхбыстрый Python», а в оригинале более скромно — «Fast Python». Ее подзаголовок — «Эффективные техники для работы с большими наборами данных». Сразу скажу, что книга мне очень понравилась и я ее всячески рекомендую тем, кто занимается обработкой данных или большими вычислениями с использованием Python.

Как известно, Python обладает репутацией медленного языка, и к сожалению, заслуженно. Его главное преимущество — это удобство работы. Но иногда требуется скорость, которую чистый Python обеспечить не может, а переписывать всю программу на C / C++ / Rust не хочется. К счастью, для таких случаев в Python есть обходные пути, позволяющие вроде бы писать на языке Python (или его подобии), но при этом значительно повысить скорость расчета или обработки данных. Тут надо оговориться, что книга посвящена приемам и библиотекам, работающим с реализацией CPython, не затрагивая другие реализации Python, такие как PyPy, IronPython, JPython и др.

По сути эта книга является сборником приемов, позволяющих подойти с разных сторон к решению задач оптимизации работы скриптов на Python. В основном внимание сосредоточено не на сложные математические вычисления, а на обработку больших данных. Каждая глава посвящена своей теме: асинхронное и многопроцессное программирование, использованию таких инструментов как Cython (не путайте с CPython) и Numba для компиляции скрипта в более низкоуровневый код, использованию видеокарт и распределенных вычислений. И везде на очень простых примерах, как правило не превышающих страницу, автор показывает основные идеи, используя разные библиотеки, и сравнивая между собой разные решения одной и то же задачи по скорости выполнения.

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

Далее я коротко пробегусь по главам книги и расскажу о чем они.

Читать далее ‘Книга Тиаго Антао «Сверхбыстрый Python»’ »

Книжные итоги 2023

Книжные итоги 2023

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

Читать далее ‘Книжные итоги 2023’ »

Про книгу Дэвида Сиббета «Визуализируй это!»

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

Читать далее ‘Про книгу Дэвида Сиббета «Визуализируй это!»’ »

Книга Стива Макнила про старые компьютерные игры «Hey! Listen!»

Давненько я не брал в руки шашек книжек по истории IT. Книга Стива Макнила «Hey! Listen!» на меня уже давно с укоризной смотрела, стоя на полке рядом с другими еще не читанными книгами на эту тему. Наконец, я до нее добрался.

Автор этой книги — один из ведущих британского шоу о компьютерных играх «Dara O Briain’s Go 8 Bit», а к тому же еще и комик, поэтому на протяжении всей книги он пытается острить, имхо, не очень смешно (возможно, это такой британский юмор), а потом еще сам иронизирует по поводу своих шуток. Выглядит местами странно, и судя по некоторым отзывам, кого-то это раздражает, но меня его шутки как-то не бесили.

Полное название книги «Hey! Listen! Путешествие по золотому веку видеоигр». Здесь подразумеваются 80-90-е годы прошлого века, и автор честно заявляет, что это его субъективный взгляд, хотя на самом деле книга охватывает более широкий диапазон времени. Эта книга даже не столько про игры, сколько про развитие игровой индустрии, начиная с пинбольных столов и первой игры в теннис на экране осциллографа и примерно до конца 1990-х годов, иногда заглядывая в начало 2000-х. Макнилу неплохо удалось показать переходы от повсеместного распространения одного типа дейвайса для игр к другому: от механических игровых автоматов к цифровым, затем появление приставок, затем появление PC и конкуренция этой платформы с приставками за игроков, особенно после выхода Windows 95 и DirectX. В книге упоминается огромное количество игр, но ни на одной из них автор долго не задерживается, в основном рассказывая про производителей «железа» — сначала пинболов, затем игровых автоматов, потом приставок.

Читать далее ‘Книга Стива Макнила про старые компьютерные игры «Hey! Listen!»’ »

Про книгу Энтони Шоу «Внутри CPython»

После того, как более-менее освоишь какой-либо инструмент, которым постоянно пользуешься, полезно заглянуть в его «внутренности», чтобы его работа не воспринималась как магия, которая каким-то неведомым образом что-то делает. Поэтому, когда вышла книга Энтони Шоу «Внутри CPython», я ее сразу заказал. На днях я ее дочитал и расскажу о ней в этом посте.

Сразу определимся с терминологией, чтобы было ясно, о чем книга. CPython (не путайте с Cython) — это эталонная реализация Python, которая написана на языке C. Собственно, это и есть тот самый интерпретатор Python, которым пользуются большинство питонистов. Как вы, наверное, знаете, есть и другие интерпретаторы Python, написанные на других языках. Например, PyPy (интерпретатор, написанный на Python), IronPython (реализация Python под платформу .NET), Jython (реализация на Java). В данной же книге речь идет о всем знакомом интерпретаторе, а не о каком-то экзотическом (да простят меня пользователи перечисленных выше реализаций).

Сразу скажу, что книга оставила у меня неоднозначное впечатление. Наверное, я ожидал от нее чуть более высокоуровневого описания работы Python, надеялся, что больше будет написано про байт-код и его ассемблерные команды. В реальности книга представляет собой обзорную экскурсию по исходникам интерпретатора Python. На самом деле это тоже любопытно, но эти знания более удалены от практики применения Python. Эту книгу можно посоветовать тем, кто хочет начать участвовать в разработке CPython. К сожалению, она уже начала устаревать. В ней речь идет о Python 3.9, и когда я ее начал читать, то решил, что я буду смотреть в исходники Python 3.11, но там уже некоторых файлов не стало, а какие-то были переименованы. Особенно это касается частей кода, связанных с парсером. О некоторых подобных изменениях автор предупреждает, говоря о том, что парсер был переписан, но в Python 3.9 можно было найти обе версии, а в 3.11 осталась только новая. С другой стороны, это был тоже любопытный квест, искать куски кода, если указанного файла нет.

Читать далее ‘Про книгу Энтони Шоу «Внутри CPython»’ »

Книга Мэттью Фаулера «Asyncio и конкурентное программирование на Python»

Недавно в издательстве ДМК вышла книга Мэттью Фаулера «Asyncio и конкурентное программирование на Python».

Как известно, у интерпретатора Python из-за наличия GIL (Global Interpreter Lock) имеются достаточно серьезные ограничения для полноценного использования всех ядер процессора. Для сложных вычислительных задач можно запускать несколько процессов со своим интерпретатором Python, каждый из которых обрабатывал бы свой собственный кусок данных, но создание нового процесса — достаточно тяжелая операция, и если ее делать часто, то производительность будет проседать. В то же время при некоторых низкоуровневых операциях (в основном это ввод-вывод) возможно написать код, который бы выполнялся параллельно, и именно в этом основная идея асинхронного программирования. Использование асинхронного программирования — это достаточно сложная область в любом языке программирования, а в Python все усложняется еще и тем, что нужно понимать, когда асинхронное программирование может дать какой-то выигрыш.

Книга Мэттью Фаулера рассматривает асинхронное и параллельное программирование (объединенные под одним термином «конкурентное программирование», что показывает аккуратность автора в терминологии) с разных сторон. Здесь будет рассказано и про асинхронщину, и про многопоточноть (в значении multithreading), и про прогопроцессность. Все это в конце концов рассматривается под тем углом, как для всего этого дела может помочь стандартная библиотека asyncio, которая в первую очередь ассоциируется именно с асинхронным программированием, хотя она позволяет использовать также пулы потоков и процессов.

Читать далее ‘Книга Мэттью Фаулера «Asyncio и конкурентное программирование на Python»’ »

Книга Рэя Монка «Роберт Оппенгеймер. Жизнь в центре»

В конце прошлого года, если вы помните, я писал о достаточно объемной книге Ричарда Роудса «Создание атомной бомбы». После ее окончания я решил продолжить чтение на эту тему, к тому же некоторое время назад на одной из московских книжных ярмарок я купил еще одну большую книгу с биографией Дж. Роберте Оппенгеймера — руководителя Менхэттенского проекта, в рамках которого были созданы первые в мире атомные бомбы. Это книга Рэя Монка «Роберт Оппенгеймер. Жизнь в центре» («Robert Oppenheimer. A Life Inside the Center»), про которую и расскажу в этом посте.

При всей своей замечательности книги Роудса, в «Создании атомной бомбы» непосредственно про Оппенгеймера было написано не особо подробно, сделав упор на других ученых. Именно поэтому книга Монка отлично ее дополняет. Удивительно, что несмотря на монументальность обеих книг, во время чтения «Оппенгеймера» не было ощущения, что читаешь что-то повторно, настолько по-разному сделаны акценты в этих книгах, причем Монк иногда ссылается на книгу Роудса, написанную на 26 лет раньше (Роудс свою книгу написал в 1986 году, а оригинал книги Монка вышел в 2012 г).

Читать далее ‘Книга Рэя Монка «Роберт Оппенгеймер. Жизнь в центре»’ »

Выходят две новые книги про Pandas

У двух издательств (ДМК и Питер) почти одновременно появились новые книжки про Pandas — мощной библиотеки для работы с табличными данными в Python.

В издательстве ДМК выходит третье издание «Python и анализ данных» Уэса Маккини, основного разработчика библиотеки Pandas. Я когда-то читал первое издание и писал про него обзор. Эта книга не только про Pandas, но еще и про Numpy и другие математические инструменты вроде IPython и Jupyuter, но большая часть книги все-таки посвящена Pandas.

А в издательстве Питер выходит книга «Pandas в действии» Бориса Пасхавера. Про эту книгу ничего сказать пока не могу.

Книжные итоги 2022 года

Ну что ж, с наступающим. А тех, кто это прочтет 1 января (зачем-то), с наступившим. Для себя я итоги этого года подвел, но на всеобщий доступ это выкладывать не буду. Оставлю оттуда только список книг, которые прочитал в этом году. Так уж сложилось, что на свой сайт и вообще в соц. сети в этом году я писал в основном про книги и OutWiker. Но про OutWiker я лучше напишу, когда подготовлю следующий релиз, а вот про книги — пожалуйста. Я их отсортировал по темам, а не по порядку прочтения. К сожалению, в этом году прочитал только одну художественную книгу, а остальное все нон-фикшн и программерские книги. Ну и проставил субъективные оценки.

Читать далее ‘Книжные итоги 2022 года’ »

Метод ведения ежедневника Bullet Journal и книжка про него

Просматривая разные сообщества и блоги, посвященные способам ведения и хранения заметок, я несколько раз натыкался на упоминание термина «Bullet Journal». Чтобы разобраться, что это такое, с чем его едят и пригодится ли это мне, прочитал книжку, написанную автором этого метода Райдером Кэрроллом (его сайт на эту же тему — https://bulletjournal.com).

Прежде чем говорить про сам метод, надо разобраться со смыслом слов, входящих в его название. Слово «bullet» в данном случае не имеет никакого отношения к боеприпасам. Этим словом называют типографский символ, который печатается в начале каждого элемента списка. Это те самые кружки, тире, звездочки, галочки и т.п. символы в начале каждой строки ненумерованного списка.

Со словом «journal» интереснее. Сайт Lingvo предлагает для него несколько вариантов перевода, включая «дневник», «личный журнал (обычно тот, который ведут во время путешествия)», «бортовой журнал», «протокол». Заманчиво использовать слово «дневник», но это слово слишком многозначное. И, кстати, в англоязычной среде для слова «дневник» используется несколько терминов, включая journal и diary. Судя по тому, что в англонете мне попадались статьи на тему Journal vs Diary, там эти термины тоже путают. Но если почитать подробнее, то под словом diary там понимают дневник, который пишут ежедневно в свободной форме (то, что у нас любят называть саркастической фразой «дорогой дневничок»). Journal по сути — это сборник мыслей и идей. Ключевое отличие diary от journal заключается в том, что в diary важна привязка заметок к датам, а в journal — это вторично, не важно к какой дате вы отнесете пришедшую в голову мысль, главное, чтобы эта мысль где-то сохранилась.

Мне кажется, что для слово journal вполне подойдет наш аналог «ежедневник». Это более строгий термин, ассоциирующийся скорее с работой и деловой активностью. И применительно к Bullet Journal это очень близко к сути, хотя в этом методе во многих случаях привязка к датам играет важную роль, но есть типы заметок, которые не важно, когда вы создали.

Читать далее ‘Метод ведения ежедневника Bullet Journal и книжка про него’ »