@LogicDaemon-pubru
5 subscribers
4 photos
8 files
16 links
Download Telegram
Я сделал свой первый python3 asyncio скрипт. Сравнивает два каталога, и для одинаковых файлов (расположенных по одинаковому под-пути) устанавливает дату более старого.

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

set_older_datetimes_for_same_files.py

P.S. asyncio – какой-то ужас. Легче сразу на go писать.
concurrency в python:

* Threading: работает как ожидается, внедрять можно постепенно в отдельные модули, остальная программа может про это вообще ничего не знать. Но отдельный тред создаётся на каждый чих, либо надо писать собственный пул-менеджер.
* Concurrent.futures: только для простых задач или для одной процедуры (main?), т. к. если таска в pool'е, и попытается запустить другую таску, может случиться дэдлок прямо в этом месте (если пул уже будет заполнен)
* asyncio (async, await): вроде лишен этих недостатков, но требует полного переписывания всего кода. "Постепенное" внедрение невозможно. Все синхронные примитивы, типа стандартного open(), все операции с файлами, все вызовы внешних библиотек, не поддерживающих asyncio, блокируют всю программу целиком.
Коллега посоветовал gevent.
Выглядит хорошо.

from gevent import monkey; monkey.patch_all()
Нашел для python модуль logicmin, минимизирующий логику по таблицам истинности; причем в моём случае оптимизированная логика используется, чтобы объяснить, почему то или иное состояние приводит к определённому действию сервера.

Вроде, то же самое умеет pyeda, но logicmin явно меньше и проще.
С прискорбием узнал, что KC Softwares закрывается :-( SUMo и DUMo больше не работают, и больше никогда работать не будут.

Замены им нет, пока (временно) начал использовать https://github.com/NexovaDev/UpdateHub, но он из нескольких сотен программ видит пару десятков :-(
Скрипт для бэкапа почты из IMAP4. И бойлерплейт для питонячих скриптов с CLI и чтением конфига (причем параметры конфигурации в CLI и конфиге идентичны, их не надо указывать дважды)
https://t.me/logicdaemon_pub/6
Интересная Copilot-like дополнялка-рефакторилка https://marketplace.visualstudio.com/items?itemName=Morph.rift-vscode https://github.com/morph-labs/rift
Есть фичи, которых нет в Copilot, но нет автоподбора контекста из открытых и соседних файлов (который есть в Copilot).
Модель выбирается: можно использовать OpenAI-шное (если есть токен), но можно и локальные модели GPT4All и HuggingFace.
commit_message.py
20.4 KB
тут в пятницу и сегодня утром запилил генератор commit message по git diff-у, используя gpt4all (тестировал с mistral-7b-openorca.gguf2.Q4_0.gguf но может заработать и с другими моделями).
Есть такая штука, генератор парольных фраз на javascript'е, давно пользуюсь https://www.fourmilab.ch/javascrypt/pass_phrase.html

Кроме парольных фраз, бывает удобно генерировать и e-mail'ы для моего домена.

Открывать новую страницу в браузере и вручную копипастить оттуда надоело, поэтому я запилил (вдохновляясь тем самым javascrypt и его словарем) пару скриптов:

email.ahk — использует буфер обмена в качестве суффикса, и набирает на клавиатуре сгенерированный e-mail. Его предполагается вешать на горячую клавишу;

pass_phrase.ahk — GUI, генерирует e-mail и набор слов в поле, откуда их можно скопировать.

Оба читают %LocalAppData%\_sec\EmailSuffix.txt и дописывают первую строчку к сгенерированному e-mail-у.

Кроме самих скриптов, потребуется wordstab.txt оттуда же.