Я Дмитрий Маракасов, разработчик свободного программного обеспечения. Я пишу в основном на C++ и Python, участвую в разработке FreeBSD, интересуюсь пакетными системами, переносимостью ПО, разработкой свободных игр, а также улучшением и продвижением экосистемы свободного ПО, железа и данных в общем и целом. Контрибучу во всё до чего дотянутся руки.
Неполный список важных проектов в которых я участвую или участвовал:
- Я поддерживаю более 350 портов, и сделал более 15000 коммитов в коллекцию портов FreeBSD.
- Я автор Repology - сервиса агрегирующего информацию о пакетах из более 300 репозиториев на благо авторам ПО и мантейнерам пакетов.
- Я написал несколько C/C++ библиотек:
- libversion - библиотека для сравнения версий во всём многообразии их форматов;
- libSDLpp - C++ обёртка над SDL2.
- Я написал несколько модулей Python:
- aesqlapius - способ организации SQL запросов в виде Python API;
- jsonslicer - быстрый потоковый парсер больших JSON файлов;
- libversion - Python обёртка над libversion упомянутой выше.
- Я переписал игру XKCD #1608 “Hoverboard” в виде полноценного приложения.
- Я поддерживаю кое-какие проекты заброшенные авторами:
- flops - простой floating point бенчмарк;
- Trip on the Funny Boat - небольшая аркадная игра про кораблик;
- QNetWalk, знаменитая игра для системных администраторов.
- Несколько лет я активно участвовал в OpenStreetMap и написал
- tiletool - инструмент для обработки фрагментов растровой карты,
- opening_hours.js - javascript библиотеку для обработки используемого в OSM формата описания расписания работы заведений,
- glosm - трёхмерный рендер OpenStreetMap,
- streetmangler - утилиту для нормализации названий улиц.
- Я участвовал в причёсывании кода тех самых Вангеров и портировании их под Linux.
- Мои коммиты можно встретить в сотнях разнообразных свободных проектов.
Примерно обо всём этом я и пишу в этом блоге.
Последние посты
Python 3.11 в портах FreeBSD
Месяц назад я добавил в порты FreeBSD Python 3.11 (alpha2). Это продолжение моей работы над поддержкой (пререлиза) Python 3.10, и, как и с предыдущей версией, целью является дать возможность заинтересованным поиграть с новой версией языка, мантейнерам проверить совместимость своих портов, а разработчикам - своего кода. Хочу рассказать про статус поддержки и про то как был портирован Python 3.10. Статус Python 3.10 Поддержка Python 3.10 пока далека от полноценной, так как эту версию языка пока не поддерживают многие критичные пакеты (в основном по причине устаревших версий в портах, но есть и случаи отсутствия поддержки в upstream).Пакетопригодность: нежелательные флаги компилятора
Иногда возникает желание добавить в сборку по умолчанию несколько
полезных флагов компиляции типа -Werror
(чтобы гарантировано
исправлять предупреждения компилятора) и -march=native
(чтобы
собирать более эффективные бинарники). На деле это сулит проблемы
при создании пакетов.
Писать большие посты трудно
Работа над азбукой переносимости как-то подзаглохла, и причина тому скорее всего в попытке откусить слишком большой кусок, а именно написать сразу огромную статью, да ещё и на двух языках. Сейчас две такие статьи в черновиках, работы до публикации они требуют ещё много, и это демотивирует. Поэтому пробую сменить формат на небольшие посты. Это не помешает собрать их потом в книгу, а писать станет проще. Помимо этого, думаю над изменением названия. Всё-таки тема ближе к опакечиванию чем к переносимости (хотя это и связанные вещи).Азбука переносимости: именование проектов
Удивительно, но можно насоздавать проблем для переносимости и пакетирования ПО проекта даже не написав ни строчки кода, а просто неудачно его назвав.
Выбирая название для проекта, убедитесь что оно однозначно, уникально и совместимо с распространёнными ограничениями на именование пакетов, иначе есть риск что пакет вашего ПО или устанавливаемые им файлы будут называться совсем не так как вы задумали (чтобы избежать конфликтов, соответствовать требованиям при создании пакетов, или просто потому что вас недопоняли). В результате пользователи столкнутся с трудностями при поиске, установке и использовании вашего ПО, а автоматизированные инструменты (например уведомители о новых релизах или уязвимостях) не будут работать. Вдобавок, такие изменения скорее всего будет различаться от репозитория к репозиторию, что усложнит миграцию между дистрибутивами, поломает переносимость зависимых скриптов и приложений и применимость документации.