А официальное приложение доступно только для Windows и MacOS. Линукс в пролёте.
Однако, есть неофициальный порт Figma-linux.
После его установки, оказывается, что и он не видит пользовательские шрифты. Линукс был бы не линуксом, еслиб не требовал ко всему дополнительных "плясок с бубном". И эти "пляски" увенчались успехом.
Поддержка пользовательских шрифтов в Figma-linux.
Всё достаточно просто.
1. В менеджере файлов переходим в директорию
2. Копируем в эту директорию нужные шрифты.
3. Открываем терминал и выполняем команду
Если возникает ошибка, что команда не найдена, нужно установить пакет
4. Запускаем Figma-linux. Шрифты будут доступны.
Вот так, казалось бы, банальная для винды вещь в виде шрифтов, в линуксе требует "особого" подхода.
Однако, есть неофициальный порт Figma-linux.
После его установки, оказывается, что и он не видит пользовательские шрифты. Линукс был бы не линуксом, еслиб не требовал ко всему дополнительных "плясок с бубном". И эти "пляски" увенчались успехом.
Поддержка пользовательских шрифтов в Figma-linux.
Всё достаточно просто.
1. В менеджере файлов переходим в директорию
~/.local/share/fonts
(~ означает домашний каталог пользователя). 2. Копируем в эту директорию нужные шрифты.
3. Открываем терминал и выполняем команду
fc-cache -fv
. Эта команда обновит кэш шрифтов в системе.Если возникает ошибка, что команда не найдена, нужно установить пакет
fontconfig
: sudo apt install fontconfig
.4. Запускаем Figma-linux. Шрифты будут доступны.
Вот так, казалось бы, банальная для винды вещь в виде шрифтов, в линуксе требует "особого" подхода.
👍1🤩1
Всем привет!
Наверное каждый программист помимо написания проектов на готовых библиотеках и фреймворках, хоть раз в жизни задумывался о написании своей библиотеки.
Такая мысль посетила недавно и меня, когда в работе над одним проектом, мне понадобилось использовать ЮКассу как способ оплаты. Однако, официальная библиотека имеет ряд недостатков, главный из которых заключается в том, что она синхронная.
И я задумался, а почему бы не переписать её на современных технологиях? Подумано - сделано! Я начал работу по переписываю официальной библиотеки.
И так, версия 0.1.1, что сделано на данный момент?
- Написаны модели данных платежа для запроса и ответа.
- Написан класс конфигурации и АПИ клиента
- Начат класс платежа. Написан и работает метод создания платежа.
Работы ещё много... Но, надеюсь, что это всё не зря)
Буду рад, если поставите звёздочку в репозитории проекта.
Ссылки:
- Репозиторий: https://github.com/proDreams/async_yookassa
- PyPi: https://pypi.org/project/async_yookassa/
Наверное каждый программист помимо написания проектов на готовых библиотеках и фреймворках, хоть раз в жизни задумывался о написании своей библиотеки.
Такая мысль посетила недавно и меня, когда в работе над одним проектом, мне понадобилось использовать ЮКассу как способ оплаты. Однако, официальная библиотека имеет ряд недостатков, главный из которых заключается в том, что она синхронная.
И я задумался, а почему бы не переписать её на современных технологиях? Подумано - сделано! Я начал работу по переписываю официальной библиотеки.
И так, версия 0.1.1, что сделано на данный момент?
- Написаны модели данных платежа для запроса и ответа.
- Написан класс конфигурации и АПИ клиента
- Начат класс платежа. Написан и работает метод создания платежа.
Работы ещё много... Но, надеюсь, что это всё не зря)
Буду рад, если поставите звёздочку в репозитории проекта.
Ссылки:
- Репозиторий: https://github.com/proDreams/async_yookassa
- PyPi: https://pypi.org/project/async_yookassa/
👍4🔥3🤩1
В Linux долгое время использовалась система X11 для отображения графики. Однако, она устарела и была заменена более современным и эффективным протоколом Wayland. Этот новый протокол не только повышает производительность, но и обеспечивает большую безопасность и лучшую совместимость с современными графическими картами.
В Debian 12 с оболочкой GNOME, Wayland активирован по умолчанию, однако в моем случае система продолжала использовать X11. Это вызывало неудобства — система казалась медленной и иногда случались статтеры.
Выполнив команду
Перепробовав несколько вариантов из интернета, чуть всё не сломав я собрал из нескольких "рабочий" для Debian 12 и графической оболочки GNOME, вариант.
В Debian 12 с оболочкой GNOME, Wayland активирован по умолчанию, однако в моем случае система продолжала использовать X11. Это вызывало неудобства — система казалась медленной и иногда случались статтеры.
Выполнив команду
echo $XDG_SESSION_TYPE
и получив в выводе X11
, вместо wayland
, как говорится "всё встало на свои места". Но вот странно, драйвера на видеокарту стоят, последний GNOME, а Wayland'а нет.Перепробовав несколько вариантов из интернета, чуть всё не сломав я собрал из нескольких "рабочий" для Debian 12 и графической оболочки GNOME, вариант.
🤩1
Приступим.
1. Сразу переключаемся на sudo-пользователя, чтобы было проще:
2. Нужно установить необходимые зависимости или доустановить недостающие:
3. Открываем для редактирования файл конфигурации загрузчика GRUB:
3.1. Находим строку
3.2. Сохраняем изменения
4. Открываем для редактирования конфигурационный файл Графического менеджера Gnome (GDM3):
4.1. Находим закомментированную строку
5. Открываем для редактирования конфигурационный файл Nvidia:
5.1. В конец добавляем следующую строку:
6. Обновляем
7. Перезагружаемся выполнив команду:
Готово. Теперь при входе в систему можно выбрать сеанс
1. Сразу переключаемся на sudo-пользователя, чтобы было проще:
su -
2. Нужно установить необходимые зависимости или доустановить недостающие:
apt install xwayland libxcb1 libnvidia-egl-wayland1 initramfs-tools
3. Открываем для редактирования файл конфигурации загрузчика GRUB:
nano /etc/default/grub
3.1. Находим строку
GRUB_CMDLINE_LINUX=
и добавляем в неё rd.driver.blacklist=nouveau nvidia-drm.modeset=1
. Должно быть примерно так:GRUB_CMDLINE_LINUX="rd.driver.blacklist=nouveau nvidia-drm.modeset=1"
3.2. Сохраняем изменения
CTRL+S
и выходим CTRL+X
. После чего выполняем команду обновления загрузчика:update-grub2
4. Открываем для редактирования конфигурационный файл Графического менеджера Gnome (GDM3):
nano /etc/gdm3/daemon.conf
4.1. Находим закомментированную строку
#WaylandEnable=false
и изменяем её на WaylandEnable=true
. Сохраняем изменения CTRL+S
и выходим CTRL+X
.5. Открываем для редактирования конфигурационный файл Nvidia:
nano /etc/modprobe.d/nvidia.conf
5.1. В конец добавляем следующую строку:
options nvidia-drm modeset=1
. Убедитесь, что такой строки больше нет в файле. Сохраняем изменения CTRL+S
и выходим CTRL+X
.6. Обновляем
initramfs
, чтобы применить изменения:update-initramfs -u
7. Перезагружаемся выполнив команду:
reboot
Готово. Теперь при входе в систему можно выбрать сеанс
GNOME
, который будет использовать Wayland
, а не X11
.Продолжаем ковырять Linux. На этот раз проблема с NTFS-разделами.
У меня несколько SSD-дисков:
- 500Гб NVME с Windows
- 960Гб SATA SSD под файлы
- 240Гб SATA SSD с Debian
И перебравшись почти полностью на Debian, мне стало не хватать этих 240Гб. И тогда я подумал: «а почему бы не использовать второй диск?», но форматировать его я не хотел, слишком уж там много всего.
В файловом менеджере Nautilus NTFS-разделы отображаются, однако для подключения к ним требуется root-пароль. Это вызвало первый вопрос: «нафига?» Зачем нужен пароль администратора для доступа к другим дискам/файловым системам?
Идём дальше. После ввода пароля администратора, доступ к диску появляется, но и тут не всё гладко! Диск доступен только в режиме чтения для текущего пользователя. Открывать его через root-пользователя глупо, так как он мне нужен доступным текущему пользователю и запущенным программам.
В общем, я начал разбираться. Что мне было нужно:
1. Чтобы диск был доступен текущему пользователю для чтения и записи.
2. Чтобы диск был доступен для выполнения с него (это нужно, например, для Steam).
3. Чтобы диск монтировался автоматически при запуске системы.
У меня несколько SSD-дисков:
- 500Гб NVME с Windows
- 960Гб SATA SSD под файлы
- 240Гб SATA SSD с Debian
И перебравшись почти полностью на Debian, мне стало не хватать этих 240Гб. И тогда я подумал: «а почему бы не использовать второй диск?», но форматировать его я не хотел, слишком уж там много всего.
В файловом менеджере Nautilus NTFS-разделы отображаются, однако для подключения к ним требуется root-пароль. Это вызвало первый вопрос: «нафига?» Зачем нужен пароль администратора для доступа к другим дискам/файловым системам?
Идём дальше. После ввода пароля администратора, доступ к диску появляется, но и тут не всё гладко! Диск доступен только в режиме чтения для текущего пользователя. Открывать его через root-пользователя глупо, так как он мне нужен доступным текущему пользователю и запущенным программам.
В общем, я начал разбираться. Что мне было нужно:
1. Чтобы диск был доступен текущему пользователю для чтения и записи.
2. Чтобы диск был доступен для выполнения с него (это нужно, например, для Steam).
3. Чтобы диск монтировался автоматически при запуске системы.
Что нужно делать?
1. Установить или доустановить необходимые пакеты:
2. Выполняем команду для отображения всех подключенных дисков, их файловой системы и UUID:
Отобразятся диски в виде дерева с разделами. Там будут
3. Далее открываем для редактирования файл
Спускаемся в самый низ файла и добавляем строку монтирования:
Что тут прописываем:
- UUID=uuid_диска: Уникальный идентификатор (UUID) раздела диска, который нужно смонтировать.
- /mnt/название_раздела: Путь, куда будет смонтирован раздел. Например,
- ntfs-3g: Тип файловой системы и драйвер для монтирования.
- auto,user,defaults,uid=1000,gid=1000,umask=022:
- user: Пользователи могут самостоятельно монтировать этот раздел без root-прав.
- defaults: Использование набора стандартных опций для монтирования (равносильно
- rw: Раздел будет смонтирован в режиме чтения и записи.
- suid: Скрипты, находящиеся на этом устройстве, могут устанавливать пользовательские права (UID) при запуске.
- dev: Разрешает доступ к блочным устройствам внутри монтируемого раздела.
- exec: Позволяет выполнение исполняемых файлов на смонтированном разделе.
- auto: Раздел будет автоматически монтироваться при загрузке системы и командой
- nouser: Запрещает обычным пользователям (не root) самостоятельно монтировать этот раздел без использования
- async: Операции ввода/вывода выполняются асинхронно, что может ускорить работу файловой системы.
- uid=1000: Владелец файлов на смонтированном разделе будет иметь UID
- gid=1000: Группа владельца файлов будет иметь GID
- umask=022: Маска прав доступа по умолчанию для новых файлов и директорий, равная
- 0: Первый параметр в
- 0: Второй параметр в
В моём случае два диска выглядят так:
Сохраняем изменения
4. Перезагружаем систему:
Готово. Диски теперь доступны по пути
Важно: Использование параметра
1. Установить или доустановить необходимые пакеты:
sudo apt install ntfs-3g udisks2
2. Выполняем команду для отображения всех подключенных дисков, их файловой системы и UUID:
lsblk -o NAME,FSTYPE,UUID
Отобразятся диски в виде дерева с разделами. Там будут
sda
, sdb
, sd...
, а если есть NVME-диск, то и nvme...
. Нужно найти необходимые NTFS-разделы и сохранить их UUID из третьего столбца.3. Далее открываем для редактирования файл
fstab
, который отвечает за монтирование дисков:sudo nano /etc/fstab
Спускаемся в самый низ файла и добавляем строку монтирования:
UUID=uuid_диска /mnt/название_раздела ntfs-3g user,defaults,uid=1000,gid=1000,umask=022 0 0
Что тут прописываем:
- UUID=uuid_диска: Уникальный идентификатор (UUID) раздела диска, который нужно смонтировать.
- /mnt/название_раздела: Путь, куда будет смонтирован раздел. Например,
/mnt/sdb2
или /mnt/nvme0n1p2
.- ntfs-3g: Тип файловой системы и драйвер для монтирования.
ntfs-3g
используется для поддержки NTFS на Linux.- auto,user,defaults,uid=1000,gid=1000,umask=022:
- user: Пользователи могут самостоятельно монтировать этот раздел без root-прав.
- defaults: Использование набора стандартных опций для монтирования (равносильно
rw,suid,dev,exec,auto,nouser,async
):- rw: Раздел будет смонтирован в режиме чтения и записи.
- suid: Скрипты, находящиеся на этом устройстве, могут устанавливать пользовательские права (UID) при запуске.
- dev: Разрешает доступ к блочным устройствам внутри монтируемого раздела.
- exec: Позволяет выполнение исполняемых файлов на смонтированном разделе.
- auto: Раздел будет автоматически монтироваться при загрузке системы и командой
mount -a
.- nouser: Запрещает обычным пользователям (не root) самостоятельно монтировать этот раздел без использования
sudo
. Переопределяется указанным выше параметром user
.- async: Операции ввода/вывода выполняются асинхронно, что может ускорить работу файловой системы.
- uid=1000: Владелец файлов на смонтированном разделе будет иметь UID
1000
.- gid=1000: Группа владельца файлов будет иметь GID
1000
.- umask=022: Маска прав доступа по умолчанию для новых файлов и директорий, равная
022
, что означает, что права будут следующими: владелец — чтение и запись (6
), группа — только чтение (4
), остальные пользователи — только чтение (4
).- 0: Первый параметр в
dump
. Если установлен в 0
, файловая система не будет резервироваться утилитой dump
.- 0: Второй параметр в
fsck
(файловая система проверяется при запуске). Значение 0
означает, что эта файловая система не будет проверяться при загрузке.В моём случае два диска выглядят так:
UUID=E0AC4955AC4926FE /mnt/sdb2 ntfs-3g user,defaults,uid=1000,gid=1000,umask=022 0 0
UUID=5E5E57A85E57782B /mnt/nvme0n1p2 ntfs-3g user,defaults,uid=1000,gid=1000,umask=022 0 0
Сохраняем изменения
CTRL+S
и выходим CTRL+X
.4. Перезагружаем систему:
sudo reboot
Готово. Диски теперь доступны по пути
/mnt/...
и их можно использовать без root-прав, в том числе и в сторонних приложениях, например, в Steam.Важно: Использование параметра
user
может привести к потенциальным рискам безопасности. Убедитесь, что вы понимаете последствия его использования.🔥3
Всем привет.
Пришлось ради одного поста, открыть старый проект на Flet и... он отказался запускаться)
Скорее всего, проблема в том, что ранее я запускал его на Windows, а теперь запускаю на Linux.
Поискав по репозиторию проекта я нашёл решение, которое хочу сохранить тут, мало ли, кому-то кроме меня оно пригодится.
1. Нужно обновить версию Flet до последней:
2. Установить пакет
3. Прокинуть симлинк (ссылку) из системного хранилища библиотек в локальное хранилище:
После этого проект запускается без проблем.
Пришлось ради одного поста, открыть старый проект на Flet и... он отказался запускаться)
Скорее всего, проблема в том, что ранее я запускал его на Windows, а теперь запускаю на Linux.
Поискав по репозиторию проекта я нашёл решение, которое хочу сохранить тут, мало ли, кому-то кроме меня оно пригодится.
1. Нужно обновить версию Flet до последней:
pip install -U flet
2. Установить пакет
libmpv
:sudo apt install libmpv-dev libmpv2
3. Прокинуть симлинк (ссылку) из системного хранилища библиотек в локальное хранилище:
sudo ln -s /usr/lib/x86_64-linux-gnu/libmpv.so /usr/lib/libmpv.so.1
После этого проект запускается без проблем.
🔥2
Всем привет!
Вчера вышла "одна долгожданная игра", я думаю вы догадываетесь о какой игре речь😉
Так вот, я конечно же решил посмотреть, "как она?". Скачав 154 гига, добавив её в библиотеку Steam и запустив... Я получил ошибку, что не найден
решение было найдено вот тут: https://www.youtube.com/watch?v=Dez4Z0xlZZU
Может кому-то пригодится, но чтобы не бегать по видосам, да и просто "для себя", напишу небольшую инструкцию к действию, чтоб потом не искать в случае повтора ситуации.
Вчера вышла "одна долгожданная игра", я думаю вы догадываетесь о какой игре речь😉
Так вот, я конечно же решил посмотреть, "как она?". Скачав 154 гига, добавив её в библиотеку Steam и запустив... Я получил ошибку, что не найден
Microsoft Visual C++
. Оно и понятно, когда устанавливаешь игру из стима, он устанавливает и все необходимые зависимости, тут же игра "сторонняя" и он не знает, что ей нужно что-то ещё, да ещё и на линуксе. решение было найдено вот тут: https://www.youtube.com/watch?v=Dez4Z0xlZZU
Может кому-то пригодится, но чтобы не бегать по видосам, да и просто "для себя", напишу небольшую инструкцию к действию, чтоб потом не искать в случае повтора ситуации.
⚡1
1. Скачиваем
2. Открываем файловый менеджер по пути:
3. Открываем Steam и добавляем оба exe-файла как сторонние приложения.
4. В свойствах каждого, во вкладке "Совместимость", выставляем галочку "... использовать Steam Play" и выбираем "Proton Experemental" или тот, которым вы пользуетесь.
5. Запускаем сперва
6. Возвращаемся в файловый менеджер. Там появилось две новые директории. Сортируем по дате изменения. Самая свежая это
7. Открываем в Steam свойства игры, которой требуется
1. На вкладке "Ярлык" отключаем оверлей Steam. С некоторыми играми он вызывает конфликты.
2. Там же в поле "Параметры запуска" вписываем следующую строку, заменив путь до директорий на свой:
8. Запускаем игру
vc_redist
для x86
и x64
:vc_redist_x86
: https://aka.ms/vs/17/release/vc_redist.x86.exevc_redist_x64
: https://aka.ms/vs/17/release/vc_redist.x64.exe2. Открываем файловый менеджер по пути:
~/.local/share/Steam/steamapps/compatdata
3. Открываем Steam и добавляем оба exe-файла как сторонние приложения.
4. В свойствах каждого, во вкладке "Совместимость", выставляем галочку "... использовать Steam Play" и выбираем "Proton Experemental" или тот, которым вы пользуетесь.
5. Запускаем сперва
x86
, устанавливаем. Повторяем с x64
.6. Возвращаемся в файловый менеджер. Там появилось две новые директории. Сортируем по дате изменения. Самая свежая это
x64
, вторая соответственно x86
. Дабы они не пропали после удаления из библиотеки Steam, переименовываем их в удобные названия. У меня это vcredist_x64
и vcredist_x86
.7. Открываем в Steam свойства игры, которой требуется
Visual C++
.1. На вкладке "Ярлык" отключаем оверлей Steam. С некоторыми играми он вызывает конфликты.
2. Там же в поле "Параметры запуска" вписываем следующую строку, заменив путь до директорий на свой:
STEAM_COMPAT_DATA_PATH=/home/prodream/.local/share/Steam/steamapps/compatdata/vcredist_x86 STEAM_COMPAT_DATA_PATH=/home/prodream/.local/share/Steam/steamapps/compatdata/vcredist_x64 %command%
8. Запускаем игру
Всем привет!
Помимо программирования, я активно изучаю и DevOps направление: Администрирование серверов, контейнеризацию, CI/CD и это только малая часть того, что нужно знать и уметь.
В своих проектах я применяю CI/CD для проверки кода линтером, тестирования (если написаны тесты), сборки и деплоя. На любом из этих этапов может произойти ошибка, и если GitHub уведомляет по почте, то собственный git на базе Gitea так не делает (или я не разобрался), тем не менее, уведомления на почту не очень удобны. Тогда я задался вопросом оповещений в Telegram, что позволит оперативно реагировать на события в пайплайнах.
Было найдено несколько готовых решений с разным уровнем функциональности, однако, только один из них поддерживал отправку в топики супергрупп. Тогда я решил, что неплохо бы написать свой Action.
Но на чём его писать? Можно бы было на Python, но я и так всё пишу на нём, хотелось "чего-то нового" и я стал выбирать между GoLang и Rust. Оба языка набирают популярность и имеют свои сильные и слабые стороны. Уж не знаю почему именно, но я выбрал для решения этой задачи Rust.
Начал "как водится", с чтения официальной книги по Rust. Она хорошо написана, но просто так, читая книгу что-то выучить трудно и я решил параллельно начать писать. В процессе, количество открытых вкладок поисковиков, Stack Overflow и других сайтов росло в геометрической прогрессии, это не считая вопросов, которые я задавал чату GPT, прося его объяснить мне в максимальных подробностях.
Результатом стала программа для выполнения в среде GitHub (и не только) Actions под названием Telegram Notify Action. Программа, при срабатывании триггера (они могут быть разные, например
Если вам интересно, хотите опробовать или просто поддержать поставив "звёздочку", прошу в репозиторий: https://github.com/proDreams/actions-telegram-notifier
Буду рад вашим комментариям и отзывам!
А я пойду дальше читать учебник, наверняка придётся ещё не раз рефакторить написанный код, а возможно и добавлять новый функционал.
Помимо программирования, я активно изучаю и DevOps направление: Администрирование серверов, контейнеризацию, CI/CD и это только малая часть того, что нужно знать и уметь.
В своих проектах я применяю CI/CD для проверки кода линтером, тестирования (если написаны тесты), сборки и деплоя. На любом из этих этапов может произойти ошибка, и если GitHub уведомляет по почте, то собственный git на базе Gitea так не делает (или я не разобрался), тем не менее, уведомления на почту не очень удобны. Тогда я задался вопросом оповещений в Telegram, что позволит оперативно реагировать на события в пайплайнах.
Было найдено несколько готовых решений с разным уровнем функциональности, однако, только один из них поддерживал отправку в топики супергрупп. Тогда я решил, что неплохо бы написать свой Action.
Но на чём его писать? Можно бы было на Python, но я и так всё пишу на нём, хотелось "чего-то нового" и я стал выбирать между GoLang и Rust. Оба языка набирают популярность и имеют свои сильные и слабые стороны. Уж не знаю почему именно, но я выбрал для решения этой задачи Rust.
Начал "как водится", с чтения официальной книги по Rust. Она хорошо написана, но просто так, читая книгу что-то выучить трудно и я решил параллельно начать писать. В процессе, количество открытых вкладок поисковиков, Stack Overflow и других сайтов росло в геометрической прогрессии, это не считая вопросов, которые я задавал чату GPT, прося его объяснить мне в максимальных подробностях.
Результатом стала программа для выполнения в среде GitHub (и не только) Actions под названием Telegram Notify Action. Программа, при срабатывании триггера (они могут быть разные, например
always
, как понятно из названия, срабатывает всегда, а failure
, только при сбое) получает данные из окружения текущего workflow и формирует текст сообщения, а затем отправляет его в Telegram-бота по API. Если вам интересно, хотите опробовать или просто поддержать поставив "звёздочку", прошу в репозиторий: https://github.com/proDreams/actions-telegram-notifier
Буду рад вашим комментариям и отзывам!
А я пойду дальше читать учебник, наверняка придётся ещё не раз рефакторить написанный код, а возможно и добавлять новый функционал.
🔥5
Привет всем!
Как у вас проходит предновогодняя суета? Носитесь поди в мыле? Ёлку поставили? Салаты заготовили?
А вот у меня что-то никакого праздника нет, даже гирлянду не повесил)
Перед новым годом нас решил обрадовать хостер сбоями, DDOS'ом и отсутствием быстрого решения. Понадобилось перенести данные с одного сервера на другой, а как водится - бэкапов у нас нет! Сервер с которого надо перенести практически не отвечает, только спустя ~два часа попыток подключиться, удалось на него прорваться и получить данные, но не суть.
Мне подкинули идею сделать sh-скрипт и даже показали пример, по выгрузке бэкапов на S3-хранилище и тут я задумался, что у меня на сервере порядка 10ти сервисов, а есть ещё и другие сервера... Писать для каждого случая свой скрипт, добавлять в cron, управлять ими. Муторно и монотонно, не находите?
Тогда я решил, что это отличная возможность продолжить практику с Rust. И меньше чем за сутки написал альфа версию утилиты для создания бэкапов. Суть вт ом, что в ней зашиты команды для создания бэкапов из локальных БД и их докер версий, а также бэкап указанной директории. Всё, что необходимо, это прописать желаемые бэкапы в конфигурационном файле, там же указать данные для подключения к S3.
Получилось, вроде неплохо, но впереди ещё нужно сделать логику по восстановлению бэкапов.
Репозиторий проекта на GitHub: https://github.com/proDreams/universal-backup-restore
Буду раз отзывам и звёздочкам, спасибо!
Всех с Наступающим Новым Годом!
Как у вас проходит предновогодняя суета? Носитесь поди в мыле? Ёлку поставили? Салаты заготовили?
А вот у меня что-то никакого праздника нет, даже гирлянду не повесил)
Перед новым годом нас решил обрадовать хостер сбоями, DDOS'ом и отсутствием быстрого решения. Понадобилось перенести данные с одного сервера на другой, а как водится - бэкапов у нас нет! Сервер с которого надо перенести практически не отвечает, только спустя ~два часа попыток подключиться, удалось на него прорваться и получить данные, но не суть.
Мне подкинули идею сделать sh-скрипт и даже показали пример, по выгрузке бэкапов на S3-хранилище и тут я задумался, что у меня на сервере порядка 10ти сервисов, а есть ещё и другие сервера... Писать для каждого случая свой скрипт, добавлять в cron, управлять ими. Муторно и монотонно, не находите?
Тогда я решил, что это отличная возможность продолжить практику с Rust. И меньше чем за сутки написал альфа версию утилиты для создания бэкапов. Суть вт ом, что в ней зашиты команды для создания бэкапов из локальных БД и их докер версий, а также бэкап указанной директории. Всё, что необходимо, это прописать желаемые бэкапы в конфигурационном файле, там же указать данные для подключения к S3.
Получилось, вроде неплохо, но впереди ещё нужно сделать логику по восстановлению бэкапов.
Репозиторий проекта на GitHub: https://github.com/proDreams/universal-backup-restore
Буду раз отзывам и звёздочкам, спасибо!
Всех с Наступающим Новым Годом!
🔥8❤1🤝1
Всем доброго утра =)
Недавно узнал о новой, "хайпующей", IDE - Zed Editor. Выделяется в первую очередь тем, что делают её авторы весьма популярного редактора Atom, и, что написан он на Rust. О самом редакторе поговорим в другой раз на Салфетке, как освоюсь (или забью).
Сейчас хочу описать решение проблемы с которой я столкнулся при использовании редактора "из коробки".
Проблема: редактор "не видел" установленные библиотеки в виртуальном окружении, а также в упор не видел модули/функции/переменные из других файлов проекта. Часы гуглежа и чтения Issue на Github привели только к решению первой проблемы, но не второй. Однако, я таки нашёл решение!
1. pyrightconfig.json
Первое, что необходимо сделать - это добавить
Тут указываем:
-
-
2. python-lsp-server
Вторым шагом будет установка в виртуальное окружение сервер
Достаточно выполнить команду:
Либо, добавить в dev-зависимости менеджера пакетов
Примечание к пунктам 1 и 2
Это необходимо делать в каждом проекте. Также, можно установить
3. Конфигурация Zed
Открыть редактирование файла настроек, либо через главное меню, либо нажав
Там добавить следующий блок:
Заменив занчение
4. Перезапуск
Перезапустить Zed.
После этого, всё должно заработать корректно. Если нет, то ну я даже не знаю)
Бонус: Мой конфиг
Это скорее для меня самого, мало ли придётся переустановить.
Недавно узнал о новой, "хайпующей", IDE - Zed Editor. Выделяется в первую очередь тем, что делают её авторы весьма популярного редактора Atom, и, что написан он на Rust. О самом редакторе поговорим в другой раз на Салфетке, как освоюсь (или забью).
Сейчас хочу описать решение проблемы с которой я столкнулся при использовании редактора "из коробки".
Проблема: редактор "не видел" установленные библиотеки в виртуальном окружении, а также в упор не видел модули/функции/переменные из других файлов проекта. Часы гуглежа и чтения Issue на Github привели только к решению первой проблемы, но не второй. Однако, я таки нашёл решение!
1. pyrightconfig.json
Первое, что необходимо сделать - это добавить
pyrightconfig.json
в корень проекта со следующим содержимым:{
"venvPath": ".",
"venv": ".venv"
}
Тут указываем:
-
venvPath
- путь до директории с виртуальным окружением, либо точку, если оно находится в корне проекта.-
venv
- название директории с виртуальным окружением.2. python-lsp-server
Вторым шагом будет установка в виртуальное окружение сервер
pylsp
. Именно он отвечает за работу с файлами проекта.Достаточно выполнить команду:
pip install 'python-lsp-server[all]'
Либо, добавить в dev-зависимости менеджера пакетов
poetry
или uv
:# poetry
poetry add -D 'python-lsp-server[all]'
# uv
uv add --dev 'python-lsp-server[all]'
Примечание к пунктам 1 и 2
Это необходимо делать в каждом проекте. Также, можно установить
pylsp
глобально и указывать его, но мне лень тестировать и это.3. Конфигурация Zed
Открыть редактирование файла настроек, либо через главное меню, либо нажав
CTRL+,
(если настройки сочетаний клавишь дефолтные).Там добавить следующий блок:
"lsp": {
"pyright": {
"settings": {
"python.analysis.diagnosticMode": "workspace",
"python.pythonPath": ".venv/bin/python"
}
}
}
Заменив занчение
python.pythonPath
на путь к интерпретатору питона в виртуальном окружении, если оно находится не в корне проекта.4. Перезапуск
Перезапустить Zed.
После этого, всё должно заработать корректно. Если нет, то ну я даже не знаю)
Бонус: Мой конфиг
Это скорее для меня самого, мало ли придётся переустановить.
{
"base_keymap": "VSCode",
"ui_font_size": 18,
"buffer_font_size": 18,
"theme": "JetBrains New Dark",
"icon_theme": {
"mode": "dark",
"light": "JetBrains New UI Icons (Light)",
"dark": "JetBrains New UI Icons (Dark)"
},
"autosave": "on_focus_change",
"languages": {
"Python": {
"language_servers": ["ruff", "pylsp", "pyright"],
"format_on_save": "on",
"formatter": [
{
"code_actions": {
"source.organizeImports.ruff": true,
"source.fixAll.ruff": true
}
},
{
"language_server": {
"name": "ruff"
}
}
]
}
},
"lsp": {
"pyright": {
"settings": {
"python.analysis.diagnosticMode": "workspace",
"python.analysis.typeCheckingMode": "basic",
"python.pythonPath": ".venv/bin/python"
}
},
"ruff": {
"initialization_options": {
"settings": {
"lineLength": 120,
"lint": {
"extendSelect": ["I"]
}
}
}
}
}
}
Всем привет!
Давно меня тут не было, ну да и фиг с ним) Принёс вам немного нейросетевого искусства)
Друг попросил сгенерировать ему изображение по его запросу:
И вот результат. Первые два изображения это ChatGPT, третья в бесплатном GensparkAI.
Как вам?)
Давно меня тут не было, ну да и фиг с ним) Принёс вам немного нейросетевого искусства)
Друг попросил сгенерировать ему изображение по его запросу:
Нарисуй большого старого подбитого робота среди руин в хвойном лесу. Погода светлая, но пасмурная. Есть небольшой туман. У робота на плечах есть орудия, в виде гаубиц. Ствол одного из орудий сломан пополам, и из него идёт дым. Робот находится в сидячем положении. Лицо направлено в небо
И вот результат. Первые два изображения это ChatGPT, третья в бесплатном GensparkAI.
Как вам?)
🔥3⚡1
В догонку решили попробовать Sora...
Пока определённо не очень. Либо я не понял, как надо)
Пока определённо не очень. Либо я не понял, как надо)