Всем привет! Меня зовут Илья. Я давно читаю habr, не так долго занимаюсь программированием и еще чуть меньше времени хочу написать здесь статью. Не то, чтобы это идея фикс (или hotfix), но лучше опубликоваться и жалеть, чем поставить в план на «когда-нибудь потом», ничего не сделать, и «получить за это премию». Таких задач у меня уже накопилось на несколько жизней вперед, поэтому, приняв волевое решение, я выделил время на графоманию.
В прошлом мне доводилось писать околонаучные тексты и вести блог про путешествия, совершенные в разных стадиях трезвости (на рецензируемые статьи ВАК про пьяные авантюры, к сожалению, не хватило грантов). Но поскольку срок давности по этим событиям давно прошел, а все самое значимое я благополучно забыл, то опишу свой недавний опыт, связанный с OpenSource.
Идея открытого программного обеспечения мне нравится. Люди, создающие OpenSource проекты вызывают интерес, особенно, когда их продукты востребованы и конкурентноспособны. Двигать индустрию IT в свободное от работы время, вместо того, чтобы предаваться гедонизму — достойно уважения. Особенно, когда сам активно пользуешься подобными продуктами, вместо платных аналогов или ручного труда.

С возрастом, я порой ощущаю желание поделать что-нибудь интересное. Жизнь-то проходит, не лежать же на диване с джойстиком от плойки в обнимку. Голова не совсем отбитая, сердце генерирует пульс, руки шаловливые — чего бы такого хорошего натворить. С подобными идеями я не мог не обратить внимание на свободное ПО, тем более, что есть некоторый опыт в IT. Но, где OpenSource, а где я — обычный инженер-программист, с богатым стеком своих собственных, нерешенных проблем. Мне бы дожить до конца будней и немного отдохнуть в ночь с пятницы на субботу. Чтобы в выходные снова написать какой-то код, но уже в спокойной обстановке. А потом повторить. Еще и еще.
Казалось бы, хочешь пушить в оупен сорс (а не в оупен спейс) — на гитхабе тебя ждет множество репозиториев, с переполненными Issues и «Welcome to PR» в README.

Разобраться в чужом коде и улучшить его — отличный навык, который тоже стоит тренировать. Но как я не подступался к поиску проектов, где могу хоть что-то написать, — нашел, примерно, ничего. Есть пальцы, чтобы нажимать по клавишам, глаза, чтобы смотреть в монитор по 8-12 часов в сутки, и мозг, чтобы изредка всем этим управлять — в чем проблема? Хоть я и не сидел без дела и не деградировал, этот вопрос меня слегка угнетал. Плохо, когда имеешь желание «пушить код в ядро Linux», но не имеешь возможности. Хотя, кого я обманываю — иногда очень даже хорошо!

Давным-давно, еще на прошлой работе, ко мне прилипла таска на написание внутренней библиотеки по специфичной проверке ip адресов, для удобного использования везде, хоть где. Например, на Марсе. Колонизировать его без доступа к скоростному интернету — дикость, не свойственная цивилизованному человеку. Предполагаю, что пока эта проблема не будет решена — никто туда и не полетит.
Сперва было не интересно работать над задачей. Основной код уже написан, но распределен по нескольким микросервисам — его нужно только скомпоновать и чуть улучшить. Но в какой-то момент я решил, что нужно поиграться с автотестами. Везде, где до этого работал, с ними не сталкивался, но от более опытных программистов слышал, что те, кто не пишут тесты — очень плохие люди.

Фикстуры и моки увлекли настолько, что файл с ними разросся до неприличных размеров. И, когда я уже начал слегка выгорать, вдруг обнаружил, что в одном из сотен кейсов, используемая библиотека ipcalc выдает ошибку: "TypeError: 'str' object is not callable". Что я мог с этим сделать?

Возможности совпали с желаниями, поэтому я оформил свой первый Pull Request (далее PR) в OpenSource. Он был принят на удивление быстро. Радость от этого «достижения» была мимолетной, все-таки как-то мелко плаваю. Разве можно будет с гордостью рассказывать об этом внукам? Засмеют.
Не смотря на всю комичность содеянного, я внезапно понял, что нащупал некую брешь в стене под названием OpenSource. Вдохновившись этим, я продолжил наращивать файл с фикстурами, попутно встретив новый странный кейс.
Некоторые IPv6 библиотека ipcalc определяла как IPv4, что неправильно.

Завел очередной Issue и спустя некоторое время еще один. Библиотека ложно определяла невалидность сжатого IPv6: "ValueError: 2002:0101:0000:0000:0000::0000:0000: IPv6 address invalid: compressed format detected in full notation".


После данного открытия я подготовил следующий PR (не путать с Public Relations) в ipcalc. Вероятно, он будет залит не раньше, чем нога человека ступит на красную планету.
После таких делишек во мне проснулся азарт охотника-собирателя, тем более, что я уже знаю, где «бродит бизон». Если в ipcalc есть ошибки, то они могут быть и в аналогичных библиотеках. Следовательно, нужно изучить стандартную библиотеку ipaddress, в которой тоже могут валяться возможности. Не на дороге же им валяться?

К всеобщей радости, код из стандартной библиотеки оказался куда более надежным, но в нем не хватало парочки тестов. На что, конечно же, нужно срочно сделать PR. Мне повезло, и его приняли быстрее, чем люди планеты Земля увидели марсианскую экспедицию в рилсах и сторисах.
На этот раз, не смотря на всю скромность правок, я, вроде как, стал контрибьютором в python. А их, если разобраться, не так уж и много. Мои будущие внуки, должны оценить такое.

После такого «оглушительного успеха» как-то не правильно почивать на лаврах. Тем более, что после перехода в RAFT мне стали прилетать более интересные задачи, в работе над которыми я использовал инструменты и библиотеки из открытого доступа. Обнаружилось, что в некоторых из них не хватает примеров использования и/или документации. Чем я и воспользовался, оформив несколько PR (раз, два, три, четыре), которые могут быть приняты примерно известно когда.
Как вы могли заметить, чтение приключенческой литературы в юные годы дало свои плоды. Если она побуждает чем-то заниматься, то более взрослые книги, подталкивают меня помахать перед людьми факелом просвещения. Показать, что даже если ты не золотой медалист мехмата МГУ — возможность нацарапать свое имя на «скрижалях IT» имеется. Достаточно пробовать новое, обращать внимание на мелкие детали, стараться видеть возможности и вносить даже незначительные улучшения. Ну, и конечно же, не забывать про автотесты — где-то они на unittest, но настала пора переписать на pytest, в других проектах ими покрыто далеко не все, или вовсе кот наплакал. Примеры использования, документация и тесты весьма далеки от rocket science, но их тоже можно и нужно делать. Кто считает, что нельзя — пусть кинет в меня камень.
Я же попробую нырнуть чуть глубже в океан OpenSource. Сейчас мне интересно самостоятельно создать что-нибудь полезное и выложить в открытый доступ. Во всяком случае, у меня есть идеи и я над ними работаю. Тему, описанную в данной статье оставляю «на растерзание» всем желающим. Она вроде как рабочая. Дерзайте!
Из всего пережитого во время описываемых событий я сделал примерно следующие выводы:
Тривиальные задачи могут стать источником вдохновения и приводить к интересным открытиям.
Автотесты способны улучшить как сам продукт, так и используемые им библиотеки.
Пушить в OpenSource не страшно - в худшем случае ваш код сочтут бесполезным, что с кем только не приключалось.
Комментарии (4)
OlegZH
04.10.2025 09:26Я давно читаю habr, не так долго занимаюсь программированием и еще чуть меньше времени хочу написать здесь статью. Не то, чтобы это идея фикс (или hotfix), но лучше опубликоваться и жалеть, чем поставить в план на «когда-нибудь потом», ничего не сделать, и «получить за это премию».
Тут самое время составить баг-репорт. Мол, жил-был товарищ, делал чего-то полезное, а вместо ожидаемого результата (статьи на Хабре), фактический результат — полнейшая тишина. Это же нарушает базовое (наиважнейшее) требование: всё полезное должно быть тщательно освещено со всех сторон и задокументировано. Баг, как Вы понимаете, требующий немедленного исправления.
С возрастом, я порой ощущаю желание поделать что-нибудь интересное.
А что, Ваша молодость пришлась на малоинтересные, но многочисленные приработки?
Мне бы дожить до конца будней и немного отдохнуть в ночь с пятницы на субботу. Чтобы в выходные снова написать какой-то код, но уже в спокойной обстановке. А потом повторить. Еще и еще.
Было бы здорово. Но я тут устроился на курсы. Как раз по тестированию. Решил открыть для себя новый и удивительный мир. Но есть ещё и обыденный быт. Не даёт развернуться кодированию, так сказать, для собственного удовольствия и пользы. Всегда есть что поисследовать!
Казалось бы, хочешь пушить в оупен сорс (а не в оупен спейс) — на гитхабе тебя ждет множество репозиториев, с переполненными Issues и «Welcome to PR» в README.
Не поясните новичку, что такое PR?
Разобраться в чужом коде и улучшить его — отличный навык, который тоже стоит тренировать.
А что, можно куда-то в чей-то репозиторий приходить и искать ошибки?
Возможности совпали с желаниями, поэтому я оформил свой первый Pull Request (далее PR) в OpenSource.
А что там за dq в коде? Придётся скачать исходный файл и посмотреть что там, к чему. А то, уж, больно генератор там в коде какой-то весёлый. Надо бы разобраться. ;-)
А можете ли сказать своими словами, в чём, там, вообще, дело, с этими адресами?
bazhil Автор
04.10.2025 09:26Правильно заданный вопрос содержит в себе часть ответа. Ваш вопрос настолько хорош, что содержит в себе некоторые ответы)
kompilainenn2
Ну, это так и работает. Никто не говорит, что вы придете в LibreOffice и обязаны с порога запилить нетривиальную фичу типа динамических массивов на 10 к строк.
Путь в тысячу ли начинается с первого шага, как говорят китайцы.
А вы молодец =)
bazhil Автор
Спасибо. Дорогу осилит идущий)