TGTGInsighttelegram intelligenceLIVE / telegram public index
Назад кон каналите
Python Заметки avatar

TGINSIGHT CHAT

Python Заметки

@pythonotes

Education

Интересные заметки и обучающие материалы по Python Контакт: @paulwinex ⚠️ Рекламу на канале не делаю!⚠️ Хештеги для поиска: #tricks #libs #pep #basic #regex #qt #django #2to3 #source #offtop

Претплатници2,220Тековни претплатници
Следени објави384Број на индексирани објави
Неодамнешен опфат13,434Збир на неодамнешни прегледи
Неодамнешни објави

Неодамнешни објави

Ознака: #linux · 8 објави

当前筛选 #linux清除筛选

Објавено 16 фев.

А что происходит на противоположном фронте? Вы, вероятно, слышали, что 2026 год называют годом Linux на десктопе (в каких-то узких кругах - годом гейминга на Linux). Всё потому, что экосистема Linux постепенно становится более дружелюбной для обычных десктоп-юзеров (в том числе привыкших к Windows), и не только! ▫️ всё чаще появляются Linux дистрибутивы визуально похожиена Windows (или даже лучше), и множество видео с советами какой дистрибутив попробовать новичкам. ▫️ обновления ядра и любых пакетов в экосистеме Linux всегда привносят оптимизацию и удобство и поддержку свежего железа (привет винде с её обратной тенденцией). Например грядущая версия 7.0, опять с множеством приятных мелочей. ▫️ после 10 лет с последего релиза версии 5 окружение KDE Plasma получила мажорный апдейт версии 6 и активно развивается (уже доросла до 6.5). GNOME тоже не спит и готовит версию 50. ▫️ в Wine добавили патч позволяющий устанавливать продукты Adobe на Linux. Для кого-то это был последний рубеж?😏 ▫️ Proton активно развивается, да так, что через эту прослойку игры работают даже быстрей чем нативно на винде. ▫️ с каждым релизом Wine и Proton поддерживается всё больше игр, что можно отслеживать на ProtonDB, и даже случаются бусты производительности. ▫️ Я сам на днях на виндобук поставил ChacyOS после чего игры, которые тянули гдето в 5-10 FPS, стали играбельными! Подтверждено личным опытом! Кстати, есть несколько дистрибутивов заточенные именно под игры. ▫️ Valve выпускают новую пачку железок которые (предположительно) порвут рынок гейминга (как и в прошлый раз) и (определнно точно) работают на Linux. Именно Valve вливает ресурсы в Linux в целом и в Proton в частности. ▫️ Госсектор разных стран давно уже мигрирует на opensource, так как нет доверия системе которая может одномоментно неконтролируемо массово рухнуть или быть удаленно заблокированной (в том числе по политическим причинам). И ниже небольшой опрос - какая у вас операционка основная? Ни к чему не призываю, ничего не советую! Просто подмечаю тенденцию и хочется узнать мнения из первых рук 😉 Знаю, что Linux тоже не идеален, знаю что каждой задаче - свой инструмент. Но это не тема поста, так что можно без холиваров) #offtop#linux

984 views

Објавено 9 фев.

reload_flag="" if [[ -n "${DEBUG}" ]]; then reload_flag="--reload" fi if [[ -n "${WORKER_COUNT}" ]]; then workers=${WORKER_COUNT} else workers=2 fi gunicorn --workers ${workers} \ --bind 0.0.0.0:8000 \ ${reload_flag} main.wsgi Писали такие конструкции чтобы проверить наличие флага и сформировать команду правильно? На самом деле можно сделать тоже самое проще. Для этого используются операторы условной подстановки, доступные в оболочках семейства POSIX. :- для установки значений по умолчанию ${WORKER_COUNT:-2} Если переменная не объявлена, то будет дефолтное значение 2. :+ подставляет указанный текст, если переменная не пуста ${DEBUG:+--reload} Если что-то есть в переменной то распечатается текст после символа +, в противном случае - ничего. Удобно для опциональных флагов, как в нашем примере. Итого наш скрипт может выглядеть так: gunicorn --workers ${WORKER_COUNT:-2} \ --bind 0.0.0.0:8000 \ ${DEBUG:+--reload} main.wsgi Есть еще два оператора. := не только подставить дефолтное значение, но и присвоить его переменной, если она пуста # никаких переменных еще нет VAL1=${VAL2:=hello} # теперь доступны обе echo $VAL1 $VAL2 # hello hello :? остановить выполнение с ошибкой, если переменной нет. echo ${MISS:?is required} bash: MISS: is required Код выхода будет 1. #tricks#linux

779 views

Објавено 29 мар.

В Linux стандартными средствами можно использовать часть оперативной памяти как диск. Для этого требуется указать тип монтирования tmpfs в команде mount mount -t tmpfs -o size=5G tmpfs /mnt/ram Теперь путь /mnt/ram можно использовать как обычный каталог. Для чего это может быть нужно? ▫️ Скорость работы с таким каталогом выше чем многие SSD и тем более HDD. ▫️ Если у вас очень быстрый SSD на NVMe M.2 то такой способ особо не прибавит вам скорости, но поможет сохранить ресурс SSD когда требуется обрабатывать очень много мелких файлов и оперативка позволяет выделить нужный объем. ▫️ Оперативка это энергозависимая память, поэтому выключении питания все файлы безвозвратно теряются. Такой "non persistent" каталог гарантирует удаление временных файлов. Я написал небольшой скрипт для условного теста и сравнения скорости копирования файлов между SSD и RAM. Вот мои результаты: Single File Size: 30.0Gb ssd > ssd: 0:00:12.850 / 2.3Gb/s sdd > ram: 0:00:06.453 / 4.6Gb/s ram > ram: 0:00:06.995 / 4.3Gb/s ram > sdd: 0:00:06.217 / 4.8Gb/s Dir size: 32.7Gb, File count: 11127 ssd > ssd: 0:00:15.063 / 2.2Gb/s sdd > ram: 0:00:08.486 / 3.9Gb/s ram > ram: 0:00:08.032 / 4.1Gb/s ram > sdd: 0:00:07.026 / 4.7Gb/s Скрипт для теста ↗️ На моём железе прирост скорости ~2x. Плюс экономия ресурса SSD. В Windows такой фишки по умолчанию нет, но обязательно найдутся аналогичные решения #linux#triks

2,740 views

Hashtags

Објавено 23 сеп.

Я нашел самый быстрый способ поднять свой независимый и бесплатный VPN Сразу оговорка, платить придётся только за хостинг. 1️⃣ Покупаем сервер где-то на просторах интернета. Конечно же сервер должен находиться за пределами страны. Например я закупился на https://eurohoster.org/ (не реклама). Проверяйте лимиты по трафику, в идеале - без ограничений. 2️⃣ Ставим docker sudo apt install docker.io Если удобней с DockerCompose то ставим и его sudo apt install docker-compose 3️⃣ Ставим WG-EASY Самый простой способ поднять сервис WireGuard c WebUI это проект wg-easy Код и документация здесь https://github.com/weejewel/wg-easy Запускаем контейнер: https://github.com/weejewel/wg-easy#2-run-wireguard-easy Для тех кто с DockerCompose, забираем файл здесь: https://gist.github.com/paulwinex/be87f79687b96786098ec8fa6a8e251c В обоих случаях потребуется поменять две переменные: WG_HOST - внешний статичный IP вашего сервера PASSWORD - придумайте пароль для WEB UI Остальные параметры указаны ниже на странице github https://github.com/weejewel/wg-easy#options 4️⃣ Ставим клиента Все доступные клиенты здесь https://www.wireguard.com/install/ Есть возможность добавить клиента в Network Manager для управления подключением через UI. Установка зависит от вашей системы, ищите мануалы в сети, их много. https://github.com/max-moser/network-manager-wireguard Скрипт установки для RasperryPi https://gist.github.com/paulwinex/c2c4090f19dbe8bd1253c5744f3f06e1 ЗЫ. Конечно же это не "самый простой" и далеко не единственный способ. А просто тот, который использую я сам. #offtop#linux

3,970 views

Објавено 14 јул.

Наверняка у многих возникло желание потестить отправку сообщений, но Redis не установлен и вообще непонятно как с ним быть. На самом деле запустить его очень просто. 🔸 Для Windows, качаем архив, запускаем redis-server.exe 🔸 Для Linux несколько команд 🔸 Если есть Docker, то еще проще docker run --rm -p 6379:6379 redis Всё, можно экспериментировать! ______________________ А еще с сервером можно поиграть в пинг-понг > redis-cli ping PONG #tricks#libs#linux

1,890 views

Објавено 23 ное.

Python + bash Если вам часто требуется запускать shell команды из Python-кода, какой способ вы используете? Самый низкоуровневый это функция os.system(), либо os.popen(). Рекомендованный способ это subprocess.call(). Но это всё еще достаточно неудобно. Советую обратить своё внимание на очень крутую библиотеку sh. Что она умеет? 🔸 удобный синтаксис вызова команд как функций # os import os os.system("tar cvf demo.tar ~/") # subprocess import subprocess subprocess.call(['tar', 'cvf', 'demo.tar', '~/']) # sh import sh sh.tar('cvf', 'demo.tar', "~/") 🔸 простое создание функции-алиаса для длинной команды fn = sh.lsof.bake('-i', '-P', '-n') output = sh.grep(fn(), 'LISTEN') в этом примере также задействован пайпинг 🔸 удобный вызов команд от sudo with sh.contrib.sudo: print(ls("/root")) Такой запрос спросит пароль. Чтобы это работало нужно соответствующим способом настроить юзера. А вот вариант с вводом пароля через код. password = "secret" sudo = sh.sudo.bake("-S", _in=password+"\n") print(sudo.ls("/root")) Это не все фишки. Больше интересных примеров смотрите в документации. Специально для Windows💀 юзеров #libs#linux

1,400 views

Hashtags

Објавено 21 окт.

А знаете ли вы, что в Bash есть особая переменная "$_" ? Из описания можно узнать, что в переменную "$_" помещается последний аргумент последней команды. Что-то знакомое? Конечно, в Python есть примерно тоже самое. Мы знаем, что дата первого релиза Bash (8 июня 1989) несколько раньше чем первый релиз Python (20 февраля 1991). Если учесть, что по задумке автора Python это агрегация самых успешных практик отовсюду, можно ли сказать что именно эта фишка к нему пришла из Bash? Ни подтверждения ни опровержения я пока не нашел. Давайте просто считать это совпадением 😉 А как это может быть полезно в Bash? Приведу простой пример, который оценят те, кто часто работает в терминале. Допустим, нам надо создать директорию и зайти в неё. Что обычно делаем? :~$ mkdir foldername :~$ cd foldername :~/foldername$ Как это сделать в одну команду? :~$ mkdir foldername && cd foldername :~/foldername$ Уже лучше, но хочется короче, без повторов. Вот тут и пригодится наша переменная. Напомню, что в неё сохраняется последний аргумент предыдущей команды. :~$ mkdir foldername && cd $_ :~/foldername$ _________________ PS. Символы "&&"" разделяют команды и означают, что требуется выполнить вторую команду только если первая завершилась успешно. #linux#tricks

1,220 views

Објавено 7 јан.

Иногда бывает ситуация когда dev-сервер по какой-либо причине не закрылся и висит в процессах, занимая порт. Это может быть из-за падения IDE или просто сам забыл погасить и закрыл терминал. Для таких случаев я набросал простую функцию с командой: kill_on_port() { port=$(lsof -t -i:$1) echo "KILL PROCESS:" $port sudo kill -9 $port } alias killonport="kill_on_port $@" Код поместить в ~/.bashrc и рестартнуть систему. Если во время старта dev-сервера получаете ошибку что порт уже занят, просто выполните команду, подставив свой порт. Bash kill_on_port 8000 Скорее всего бесполезно, если другой процесс назначен на перезапуск вашего dev-сервера в случае падения. Имя команды можете изменить на любое другое. #linux

451 views

Hashtags