LogicDaemon-pubru
из моего старого блога, 11 янв. 2016 г. командная строка в Windows – минное поле У меня есть подозрение, что в недрах Microsoft есть специальная команда разработчиков, которая специально заботится, чтобы у всего, что связано с командной строкой Windows,…
Кстати, если читаете путь из реестра, молитесь, чтобы там не было международных символов. Обнаружить их в командной строке – нереально, а выдаются reg'ом они в кодировке ANSI (а cmd.exe работает в OEM), поэтому при наличии не-ASCII символов, при попытке совершить chdir (или что угодно другое) пакетный файл будет поджидать облом.

12. Копирование папок – эпичный пример фейла (или win'а команды из первого абзаца?). Типичная команда для копирования папки в Windows:
xcopy s:\WindowsImageBackup r:\WindowsImageBackup /E /I /Q /G /H /R /K /O /Y /B /J
смогли с первого раза посчитать количество ключей? Ну ок, наверное, не все они требуются. Вот необходимый минимум, чтобы xcopy не остановился где-нибудь посередине и не задал тупой вопрос, ожидая интерактивного ответа: /E /I /G /H /R /Y. Да, кстати, Вы использовали copy? Облом будет поджидать незаметно :) Ключи copy указываются перед аргументами откуда и куда, xcopy – после аргументов.

13. %comspec% /U /C "ECHO 123>test.txt" записывает файл в UNICODE.
%comspec% /U /C "FOR /F %A IN (test.txt) DO ECHO %A" не может прочитать его!
Вы пользуетесь putty? Тогда у меня для вас штука, которая умеет копировать настройки из одной сессии в другие (например, поменяли шрифт в Default Session, и желаете применить его во всех остальных).

https://github.com/LogicDaemon/PersonalUseScripts/blob/master/misc/copy_putty_settings.ahk

--
En: For anyone who use putty, I've wrote a GUI utility to copy settings between sessions. Useful, for example, for updating font or term type in all sessions.
Questions welcome.
latest_python3.py
11.6 KB
Давно хотел запилить, и вот оно.
github.com/.../latest_python3.py

Скрипт находит последнюю версию python на официальном сайте, опционально: скачивает, в linux собирает из исходника, и ставит в $HOME/.local, а в windows просто скачивает exe и устанавливает пользователю.

Если запустить без параметров, выведется краткая справка; если с -h или --help — подробная

Перед запуском, установите lxml:
pip install lxml packaging
Я сделал свой первый 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, но он из нескольких сотен программ видит пару десятков :-(
забавное интервью. Тем, насколько я согласен с Bobuk-ом, и не согласен с интервьюером https://youtu.be/Ro1T-e0455g, особенно в последних ~30 минутах.
Скрипт для бэкапа почты из 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 оттуда же.
Режим Agent у Copilot — 💪

С ним сегодня за утро замутил скрипт, который репостит новости с сайта Магти в телегу https://t.me/magticomnews_wonderdays

При этом 99% этого кода Copilot написал сам. И потом ошибки исправлял (после запроса).

https://github.com/LogicDaemon/tgbot/