Про книгу Энтони Шоу «Внутри 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 осталась только новая. С другой стороны, это был тоже любопытный квест, искать куски кода, если указанного файла нет.

Читать далее…

Еще одно обновление статей про Matplotlib

Обновил и во многом дополнил очередную статью из серии статей про использование библиотеки Matplotlib, предназначенной для построения графиков на Python.

В этот раз обновлению подверглась статья Создание интерфейса средствами библиотеки Matplotlib, в которой рассказывается о том, как в окно с графиком можно добавить элементы управления (виджеты). В Matplotlib их не так много: кнопка, поле ввода, два вида ползунков, переключатели (radio buttons) и флажки (check buttons), но для многих задач этого будет достаточно, чтобы обойтись только библиотекой Matplotlib без сторонних библиотек для создания GUI.

Кстати, про внедрение графиков Matplotlib в интерфейс программы, написанной на wxPython у меня тоже была статья.

Новая версия статьи про Matplotlib

Очень неспешно продолжаю обновлять свои старые статьи про Matplotlib. Сегодня исправил статью Как обрабатывать события мыши и клавиатуры на графиках Matplotlib. Эта статья будет полезна, если вы захотите добавить немного интерактива для ваших графиков. Например, последний пример статье показывает, как можно добавлять на график метки с координатами (в системе координат осей), куда кликнул пользователь.

Дело близится к финалу, осталось поправить (читай, переписать) три статьи.

Полный список статей про Matplotlib можно найти на этой странице сайта.

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

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

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

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

Читать далее…

OutWiker 3.2.0.920 beta

OutWiker 3.2.0.920 beta

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

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

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

Так что в этой версии нет заметных изменений с точки зрения пользователя, если не считать исправления нескольких ошибок (где-то исправлены зависания википарсера, где-то поправлены горячие клавиши). Надеюсь, что ничего ранее работающего я не сломал.

Последнюю бета-версию OutWiker как обычно можно скачать на этой странице.

Подписывайтесь на OutWiker в социальных сетях:

Переписал еще две статьи про Matplotlib

Продолжаю переписывать старые статьи про библиотеку Matplotlib, предназначенную для построения графиков на Python. Сегодня выложил обновленные статьи:

 

Обе эти статьи пришлось довольно сильно переписать, потому что писались они еще во времена Python 2. Теперь все примеры проверены на Python 3.10 и wxPython 4.2.0 (это касается первой статьи). Во второй статье добавлено побольше примеров, исправлены некоторые участки статьи, которые уже не актуальны в текущей версии Matplotlib и в современных версиях Windows.

Мне осталось переписать еще четыре старые статьи про Matplotlib, после чего можно будет приступать к написанию новых.

Как я веду заметки

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

Все заметки я веду в OutWiker, я думаю, понятно почему :).

Читать далее…

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

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

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

Читать далее…

Обновил еще одну статью про Matplotlib

Продолжаю переписывать старые статьи про использование библиотеки Matplotlib для построения графиков на Python. Сегодня перевыложил статью, которая называется Как установить логарифмический масштаб по осям. Как и с предыдущими статьями, переписал исходники в более современном стиле, поменял скриншоты, где-то дополнил и переписал текст. С момента написания этой статьи в 2013 году в Matplotlib произошли некоторые изменения, которые сломали некоторые примеры, но теперь все приведенные скрипты актуальны. Заодно добавил еще несколько примеров.

Мысли о читателях программерских статей

Мысли о читателях программерских статей

Задумался в очередной раз о содержимом сайта jenyay.net и целевой аудитории. В последнее время посты на сайте можно разделить на три темы: программирование, OutWiker и книги. Давайте поговорим о программерских статьях. Мне нравится их писать, потому что в них понятно о чем говорить, как правило логично выстраивается какая-то структура от простого к сложному, понятна цель — рассказать о какой-то библиотеке или отдельной ее возможности простым языком. С точки зрения читателя, такие статьи не отменяют необходимости чтения документации по рассматриваемому инструменту, но по крайней мере дает какое-то начальное представление о нем и направляет в нужную сторону.

Но вот вопрос — для кого писать. Дело в том, что лично я практически все интересующие меня вопросы, связанные с программированием, ищу на английском языке. Во-первых, в англонете материала на эти темы объективно больше. И, во-вторых, на английском проще сформулировать поисковый запрос, он получается более однозначный. Программерские статьи на русском языке я читаю в основном если случайно попадется какой-то текст, который меня заинтересовал (например, на Хабре). При этом сам я статьи пишу на русском языке, получается такое вот техническое лицемерие.

Читать далее…