Итак, сегодня 1 февраля 2024, время 01:40, и на данный момент у меня в активе: 11 мини-программ и 2 проекта на питоне. А за день до этого, 31 января, я хватался за многое, и ничего особенно не сделал. Но обо всем по-порядку.
11 мини-программ
Я просто взял книгу «Большая книга проектов Python» и выполнял подряд все задания. Какие-то совсем не интересные я пропускал. Сначала читал описание задачи, потом пробовал ее сделать, затем сравнивал решения. Они плюс-минус совпадали, но были и большие отличия. Какие-то решались быстро, а над некоторыми пришлось поломать голову. Итак, вот список:
- bagels.py
- bithdayparadox.py
- bitmapmessage.py
- caesar.py
- caesarhacker.py
- calendar.py
- cells.py
- chohan.py
- collatz.py
- deepcave.py
- diamonds.py
bitmapmessage — когда делал, вспомнил свой старый проект на Delphi, где я делал ASCII-графику по загруженной картинке.
caesar — это я уже делал на Pascal/Delphi, а может и на Basic. Я узнал про шифр Цезаря из какой-то приключенческой книги, но эта история уже затерта в памяти.
calendar — вывод календаря в ASCII таблице, включая дни из прошлого и следующего месяца, чтобы неделя была полностью заполнена. Пришлось повозиться. Пробовал сначала рассчитать, какая дата конца прошлого месяца выпадает на понедельник. Но потом сделал решение проще: в цикле отматывал по 1 дню назад, пока не станет понедельником. Когда я сравнил свое решение с книжным, они в этом плане совпали.
cells — игра «Жизнь». Эту игру я делал на Delphi, а может быть и на Basic. Узнал из журнала «Наука и жизнь». Реализация на Delphi использовала, насколько помню, массивы, где каждая ячейка игрового поля — отдельный элемент массива. Циклом проходились все ячейки массива, и, согласно правилам, делался массив для следующей генерации.
Недавно узнал из Ютуба, что такое задание предлагается на собеседовании в абстрактый Гугл. Массивы — хорошо, но можно лучше — быстрее, и с экономией памяти. И такое решение — лучше. На Ютубе показали как сделать правильнее. И вот, когда настала очередь делать эту программу на Python, я ее сделал именно так, чем и горжусь.
diamonds — рисование ASCII-графикой алмазов. Хотел как-то математически высчитывать, какой символ ставить. Может быть потому что был вечер, а может быть потому что я все усложнил, но я не справился. Снес. Потом подсмотрел решение и сделал свое.
2 проекта на Python
Первый проект — deb-tools (от слова Debitos), в котором лежат утилиты для разработки:
- createdb — генерирует SQL для создания баз данных и пользователей в Postgres
- createguest — создание пользователя-гостя с правами только на чтение на dev и prod контурах
Второй проект — server-metrics. Это веб-сервер, который с /metrics отдает некоторые метрики сервера, которые не предоставляет какой-нибудь cadvisor или node-exporter:
- данные, которые получены с утилиты: docker sytem df
- количество дней до окончания регистрации доменов: из whois
В Grafana это выглядит так:
День, когда за все хватаешься, а результата кот наплакал
31 января был именно такой день. Вначале все шло по плану, но затем пришлось ставить пакет python-whois, который принес массу проблем.
Во-первых пришлось разбираться как работает venv, virtualenv и чем они отличаются.
Во-вторых, мой PyCharm упорно не давал выбрать интерпретатор внутри src/.venv каталога. Может я что-то не так делаю? Снос проекта и восстановление из git не помогло. Repair IDE не помогло. Нет, это какой-то баг. Пришлось снести PyCharm полностью, удалить его конфиги, и поставить назад. После этого заработало.
В-третьих я допустил ошибку в docker-compose.yml и долго не мог ее найти. А все было элементарно.
В-четвертых, docker образ не собирался, говорил что нет imp-модуля. На счет этого я записал в сорцах:
Сделан даунгрейд 3.12 => 3.10 из-за проблемы с установкой пакета python-whois
В-пятых, я сегодня помогал в решении вопроса с мошенниками, которые взломали Госуслуги у моей мамы (сегодня) и тещи (у нее в субботу).
В-шестых, пришлось бегать печатать документы по работе — меняют должность. Распечатал, но вопрос все еще висит — «Почта» оказалась закрыта.
Хотя, если подумать 🤔, то довольно насыщенный день.
На счет Python: у меня все еще каша в голове касаемо управления пакетами через venv, virtualenv, poetry и … (какой-нибудь еще менеджер пакетов). Какой лучше использовать, как все это вместе работает?