Расскажу про open-source инструмент для управления проектами Planka, который позиционируется как бесплатная альтернатива
Система имеет простой и легкий интерфейс, неперегруженный различными фичами, что можно отнести как к плюсам из-за скорости работы, так и к минусам из-за местами скудной функциональности.
✅ Проект активно развивается и за последний год обзавелся рядом существенных улучшений, которые приблизили его к более зрелым альтернативам. Приведу некоторые из них:
▫️ Уведомления в
▫️ Поддержка
▫️ Также развитие получил проект по API;
▫️ На начальной стадии, но все-таки ведется работа над мобильным приложением;
▫️ Локализация на русский язык в недавних версиях стала значительно приятнее в сравнении с тем, что было еще пол года назад.
❌ Из минусов отмечу:
▫️ Отсутствие шаблонов и повторяющихся задач. Много рутины по выполнению однотипных процессов во время манипуляций с проектами, досками и карточками.
▫️ Не поддерживается какая-либо аналитика (отчеты, диаграммы, сводные данные по трекингу времени и т.д.).
❇️ Демонстрационная версия доступна здесь.
❇️ Если хотите самостоятельно настроить и запустить
❇️ В репозиторий на gitverse выложил пример размещения сервиса за reverse-proxy
В целом,
#management #opensource #selfhosted
Trello.Система имеет простой и легкий интерфейс, неперегруженный различными фичами, что можно отнести как к плюсам из-за скорости работы, так и к минусам из-за местами скудной функциональности.
✅ Проект активно развивается и за последний год обзавелся рядом существенных улучшений, которые приблизили его к более зрелым альтернативам. Приведу некоторые из них:
▫️ Уведомления в
Telegram и Slack;▫️ Поддержка
OpenID Connect;▫️ Также развитие получил проект по API;
▫️ На начальной стадии, но все-таки ведется работа над мобильным приложением;
▫️ Локализация на русский язык в недавних версиях стала значительно приятнее в сравнении с тем, что было еще пол года назад.
❌ Из минусов отмечу:
▫️ Отсутствие шаблонов и повторяющихся задач. Много рутины по выполнению однотипных процессов во время манипуляций с проектами, досками и карточками.
▫️ Не поддерживается какая-либо аналитика (отчеты, диаграммы, сводные данные по трекингу времени и т.д.).
❇️ Демонстрационная версия доступна здесь.
❇️ Если хотите самостоятельно настроить и запустить
Planka на своем сервере, проще всего это сделать с помощью docker. Инструкция из официальной документации.❇️ В репозиторий на gitverse выложил пример размещения сервиса за reverse-proxy
Traefik, благодаря чему можно сразу привязать свой домен, получить сертификат и ходить через https.В целом,
Planka, даже не смотря на ограничения функциональности, подкупает своей простотой и отлично подойдет для небольших команд с базовыми потребностями в управлении задачами.#management #opensource #selfhosted
👍2
Для автоматизации задач сбора информации из каналов, групп, чатов в
Для удобства исходники выложены в репозиторий на gitverse.
📌 Задача
Выгрузить все изображения (документы, аудиофайловы) из открытого Telegram-канала в автоматическом режиме.
📌 Рабочая станция
Виртуальная машина с Debian 12 на борту.
📌 Подготовка
🔹 Для начала получим параметры для доступа к
* Идем в кабинет и авторизовываемся.
* На странице API development tools создаем новое приложение и забираем
🔹 Устанавливаем необходимые для работы пакеты
🔹 Скачиваем демонстрационный проект с
🔹 Создаем виртуальное окружение и подгружаем зависимости
🔹 В скрипте
📌 Использование
🔹 При первом запуске для получения доступа к
В корне создастся файл с расширением
🔹 В качестве примера добавлена обработка трех видов контента - документы, фото и музыка, что соответствует значениям
🔹 Запускаем
#telegram #python #telethon
Telegram, помимо официального API, существуют различного рода и направленности, как платные так и бесплатные, инструменты и библиотеки. В данном цикле заметок рассмотрим примеры работы с популярной Python библиотекой Telethon в контексте извлечения полезных данных из публичных просторов мессенджера.Для удобства исходники выложены в репозиторий на gitverse.
📌 Задача
Выгрузить все изображения (документы, аудиофайловы) из открытого Telegram-канала в автоматическом режиме.
📌 Рабочая станция
Виртуальная машина с Debian 12 на борту.
📌 Подготовка
🔹 Для начала получим параметры для доступа к
API Telegram* Идем в кабинет и авторизовываемся.
* На странице API development tools создаем новое приложение и забираем
App api_id и App api_hash.🔹 Устанавливаем необходимые для работы пакеты
sudo apt install git python3 python3-pip python3-vevn -y
🔹 Скачиваем демонстрационный проект с
gitversegit clone https://gitverse.ru/desoft/telethoner.git
🔹 Создаем виртуальное окружение и подгружаем зависимости
cd telethoner
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
🔹 В скрипте
downloader.py прописываем полученные ранее App api_id и App api_hash в константы API_ID и API_HASH соответственно.📌 Использование
🔹 При первом запуске для получения доступа к
API Telegram необходимо будет войти под своей учетной записью в интерактивном режиме (вводим номер телефона, получаем и заполняем код).Please enter your phone (or bot token): +7...............
Please enter the code you received: 00000
Signed in successfully as <USER>;
В корне создастся файл с расширением
.session, который будет использоваться для автоматической аутентификации при последующих запусках.🔹 В качестве примера добавлена обработка трех видов контента - документы, фото и музыка, что соответствует значениям
document, photo, music параметра content_type.🔹 Запускаем
# скачиваем 10 прикрепленных изображений к последним постам в Telegram-канале Хабра
python3 downloader.py --channel_url=https://t.me/habr_com --content_type=photo --path_data_folder=myfolder --limit=10
#telegram #python #telethon
👍2
На прошлой неделе рассказывал про расширение VS Code Excalidraw для рисования прямо в редакторе. Последовал вопрос от подписчика про наличие
⁉️ Смотрим в репозиторий и сразу отмечаем, что последняя релизная версия
❌ Попытка №1
И.. валимся с ошибками. Что-то про конфликты, отсутствие модулей и т.д. и т.п. Не тратим время и пробуем сразу актуальную
✅ Попытка №2
Контейнер успешно завелся. За
‼️ Впечатления
✖️ Редактор ничем не отличается от того, что предлагает встроенное в VS Code расширение.
✖️ Облачное хранилище / база данных отсутствуют (все хранится в localStorage браузера).
✖️ Проекты, рабочие пространства не поддерживаются.
✖️ Управление сценами отсутствует.
✖️ Совместная работа и публичные ссылки не поддерживаются.
Сказанного выше более чем достаточно, чтобы сделать вывод о том, что текущая self-hosted версия еще довольно сырая. Судя по всему, упор сделали на версию
#tools #opensource #selfhosted
self-hosted версии данного инструмента и поддерживаемой функциональности. Пробуем.⁉️ Смотрим в репозиторий и сразу отмечаем, что последняя релизная версия
v0.17.3 от 09.02.2024, хотя работа активно ведется, судя по частым commits и большому числу свежих pull requests.❌ Попытка №1
# клонируем репозиторий проекта
git clone https://github.com/excalidraw/excalidraw.git
# переходим на релизную версию по тэгу
git checkout tags/v0.17.3
# запускаемся
docker compose up -d
И.. валимся с ошибками. Что-то про конфликты, отсутствие модулей и т.д. и т.п. Не тратим время и пробуем сразу актуальную
dev версию.✅ Попытка №2
git checkout master
docker compose up -d
Контейнер успешно завелся. За
nginx на 3000 порту получаем долгожданный доступ к виртуальной доске.‼️ Впечатления
✖️ Редактор ничем не отличается от того, что предлагает встроенное в VS Code расширение.
✖️ Облачное хранилище / база данных отсутствуют (все хранится в localStorage браузера).
✖️ Проекты, рабочие пространства не поддерживаются.
✖️ Управление сценами отсутствует.
✖️ Совместная работа и публичные ссылки не поддерживаются.
Сказанного выше более чем достаточно, чтобы сделать вывод о том, что текущая self-hosted версия еще довольно сырая. Судя по всему, упор сделали на версию
Excalidraw+ - монетизируемое облачное решение с расширенной функциональностью. У проекта большие планы по развитию, согласно которым не забыли и про self-hosted - заявляется релиз Excalidraw+ для размещения на собственным ресурсах. Обязательно посмотрим.#tools #opensource #selfhosted
GitHub
GitHub - excalidraw/excalidraw: Virtual whiteboard for sketching hand-drawn like diagrams
Virtual whiteboard for sketching hand-drawn like diagrams - excalidraw/excalidraw
👍2🔥2
Дополню начатую ранее коллекцию плагинов для
📌1️⃣ Когда работаешь с большим числом окон и панелей, запускаешь процессы, выполняешь какой-то набор команд, часто возникает необходимость вернуться и просмотреть весь вывод в консоль или просто запомнить историю всех проделанных манипуляций. Тут нам поможет плагин
Основные возможности
▫️ Сохранение всего вывода в консоль в файл от момента начала логирования до его завершения соответствующими командами.
▫️ Текстовый скриншот экрана, т.е. сохранение в файл текущего вывода на экран консоли.
▫️ Запись истории всего происходящего в конкретной панели с момента ее создания.
Установка
В
Сохраняем файл, подключаемся к
Использование
🔹 Запустить / остановить запись логов для текущей панели:
▫️ Формат имени файла:
▫️ Каталог сохранения файла лога:
❗️ Если вы используете терминал с цветовой подсветкой синтаксиса, то полученные логи могут содержать
🔹 Сделать текстовый скриншот экрана:
▫️ Формат имени файла:
▫️ Каталог сохранения файла лога:
🔹 Записать в лог всю историю текущей панели с момента ее создания:
▫️ Формат имени файла:
▫️ Каталог сохранения файла лога:
Естественно, больше команд, чем вмещает в себя буфер
🔹 Очистить историю активной панели:
📌2️⃣ Для представления текущего каталога в виде древовидного списка в отдельной боковой панели существует плагин
Установка
В
Использование
▫️
▫️
#linux #terminal #tmux
Tmux еще несколькими полезными примерами.📌1️⃣ Когда работаешь с большим числом окон и панелей, запускаешь процессы, выполняешь какой-то набор команд, часто возникает необходимость вернуться и просмотреть весь вывод в консоль или просто запомнить историю всех проделанных манипуляций. Тут нам поможет плагин
Tmux Logging.Основные возможности
▫️ Сохранение всего вывода в консоль в файл от момента начала логирования до его завершения соответствующими командами.
▫️ Текстовый скриншот экрана, т.е. сохранение в файл текущего вывода на экран консоли.
▫️ Запись истории всего происходящего в конкретной панели с момента ее создания.
Установка
В
~/.tmux.conf прописываем плагин:set -g @plugin 'tmux-plugins/tmux-logging'
Сохраняем файл, подключаемся к
tmux сессии, если еще не в ней, и устанавливаем плагин комбинацией Ctrl + b I (здесь используется Tmux Plugin Manager для установки плагинов, см. предыдущую заметку).Использование
🔹 Запустить / остановить запись логов для текущей панели:
Ctrl + b Shift + p▫️ Формат имени файла:
tmux-#{session_name}-#{window_index}-#{pane_index}-%Y%m%dT%H%M%S.log▫️ Каталог сохранения файла лога:
$HOME❗️ Если вы используете терминал с цветовой подсветкой синтаксиса, то полученные логи могут содержать
ANSI символы, используемые как раз для цветового сопровождения текста, однако их наличие замусоривает вывод. Чтобы отфильтровать эти символы при записи логов, достаточно установить специализированный пакет ansifilter.sudo apt install ansifilter -y
🔹 Сделать текстовый скриншот экрана:
Ctrl + b Alt + p▫️ Формат имени файла:
tmux-screen-capture-#{session_name}-#{window_index}-#{pane_index}-%Y%m%dT%H%M%S.log▫️ Каталог сохранения файла лога:
$HOME🔹 Записать в лог всю историю текущей панели с момента ее создания:
Ctrl + b Alt + Shift + p▫️ Формат имени файла:
tmux-history-#{session_name}-#{window_index}-#{pane_index}-%Y%m%dT%H%M%S.log▫️ Каталог сохранения файла лога:
$HOMEЕстественно, больше команд, чем вмещает в себя буфер
tmux записать в историю не получится, но можно заранее расширить размер этого буфера в ~.tmux.conf следующим правилом:set -g history-limit 50000
🔹 Очистить историю активной панели:
Ctrl + b Alt + c📌2️⃣ Для представления текущего каталога в виде древовидного списка в отдельной боковой панели существует плагин
Tmux Sidebar (аналог утилиты tree, только вывод происходит в выделенную область, а не прямо в консоль).Установка
В
~/.tmux.conf прописываем плагин и устанавливаем:set -g @plugin 'tmux-plugins/tmux-sidebar'
Использование
▫️
Ctrl + b Tab - открывает боковую панель с деревом каталогов и файлов текущей директории.▫️
Ctrl + b Backspace - также открывает боковую панель, но еще и переносит фокус на нее.#linux #terminal #tmux
Telegram
DeSoft.ru
В продолжение темы про Tmux рассмотрим несколько полезных плагинов.
📌 Для начала установим менеджер плагинов Tmux Plugin Manager
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
▫️ В конфигурационный файл tmux (~/.tmux.conf) добавим
#…
📌 Для начала установим менеджер плагинов Tmux Plugin Manager
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
▫️ В конфигурационный файл tmux (~/.tmux.conf) добавим
#…
🔥2
Очередная шпаргалка по работе с файловыми системами в
Файл
🔍 Структура записи /etc/fstab
Каждая запись имеет следующие поля (разделяются пробелом или табуляцией):
📌 Поле
Устройство или файловая система для монтирования. Можно использовать
Примеры:
📌 Поле
Точка монтирования. Каталог, в который будет монтироваться файловая система.
📌 Поле
Тип файловой системы, которую нужно монтировать.
Примеры:
- Локальные диски:
- Сетевые файловые системы:
- Съёмные носители:
- Виртуальные файловые системы:
- Раздел подкачки:
- Автоматическое определение монтируемой файловой системы:
📌 Поле
Параметры монтирования
📌 Поле
Резервное копирование. Определяет, нужно ли использовать утилиту
📌 Поле
Порядок проверки файловой системы утилитой
✏️ Примеры монтирования
🔷 Монтирование физических / виртуальных устройств и разделов
🔷 Монтирование
Установка клиента
Монтирование:
🔷 Монтирование
Установка клиента
Монтирование:
Монтирование с использованием учетных данных из файла:
где
✏️ Полезные команды
#linux #mount #fstab #шпаргалка
Linux. На этот раз зафиксирую вопрос использования конфигурационного файла /etc/fstab для монтирования устройств, разделов, сетевых ресурсов.Файл
/etc/fstab содержит записи о всех файловых системах, которые должны быть смонтированы при загрузке системы. Каждая строка в файле описывает устройство, точку монтирования, тип файловой системы и параметры монтирования.🔍 Структура записи /etc/fstab
Каждая запись имеет следующие поля (разделяются пробелом или табуляцией):
<file system> <mount point> <type> <options> <dump> <pass>
📌 Поле
<file system>Устройство или файловая система для монтирования. Можно использовать
путь к устройству, UUID или LABEL.Примеры:
/dev/sda1, /dev/nvme0n1p1, UUID=1234-5678, LABEL=MyDrive, //192.168.1.135/share.📌 Поле
<mount point>Точка монтирования. Каталог, в который будет монтироваться файловая система.
📌 Поле
<type>Тип файловой системы, которую нужно монтировать.
Примеры:
- Локальные диски:
ext4, ext3, xfs, btrfs- Сетевые файловые системы:
nfs, cifs- Съёмные носители:
vfat, ntfs, exfat- Виртуальные файловые системы:
tmpfs, proc, sysfs- Раздел подкачки:
swap- Автоматическое определение монтируемой файловой системы:
auto📌 Поле
<options>Параметры монтирования
# параметры по умолчанию (`rw, suid, dev, exec, auto, nouser, async`)
defaults
# файловая система монтируется при загрузке автоматически
auto
# файловая система может быть смонтирована только вручную
noauto
# разрешить исполнение бинарных файлов
exec
# запретить исполнение бинарных файлов
noexec
# разрешить монтирование всем пользователям
users
# только суперпользователь может монтировать файловую систему
nouser
# монтировать в режиме только для чтения
ro
# монтировать с правами на запись
rw
# все операции ввода/вывода должны выполняться синхронно
sync
# все операции ввода/вывода должны выполняться асинхронно
async
# отключить обновление времени доступа к файлам
noatime
# отключить обновление времени доступа для каталогов
nodiratime
# запрет создания на монтируемой файловой системе файлов устройств (`/dev`)
nodev
# устанавливает владельца и группу
uid/gid
# игнорировать `suid` и `sgid` биты
nosuid
# для доступа к сетевому ресурсу
username=имя,password=пароль
# ограничение размера памяти для `tmpfs`
size=500M
📌 Поле
<dump>Резервное копирование. Определяет, нужно ли использовать утилиту
dump для резервного копирования файловой системы. 0 — нет, 1 — да.📌 Поле
<pass>Порядок проверки файловой системы утилитой
fsck при загрузке системы. 0 — не проверять, 1 — используется для корневой файловой системы / (только одна запись должна иметь 1), 2 — для остальных файловых систем, которые проверяются после корневой.✏️ Примеры монтирования
🔷 Монтирование физических / виртуальных устройств и разделов
UUID=1234-5678 / ext4 defaults 1 1
/dev/sda2 /home xfs defaults,noatime 0 2
/dev/sda3 none swap sw 0 0
/dev/sdb1 /mnt/usb vfat uid=1000,gid=1000 0 0
tmpfs /tmp tmpfs size=512M 0 0
🔷 Монтирование
NFSУстановка клиента
nfs:sudo apt install nfs-common
Монтирование:
192.168.1.65:/export/nfs /mnt/nfs nfs defaults 0 0
🔷 Монтирование
CIFSУстановка клиента
cifs:sudo apt install cifs-utils
Монтирование:
//192.168.1.135/share /mnt/share cifs username=user,password=pass,uid=1000,gid=1000 0 0
Монтирование с использованием учетных данных из файла:
//192.168.1.135/share /mnt/share cifs credentials=/etc/smbcredentials,uid=1000,gid=1000 0 0
где
/etc/smbcredentials содержитusername=myuser
password=mypassword
✏️ Полезные команды
# после изменения fstab монтируем устройства без перезагрузки
mount -a
# проверка корректности fstab / монтирование с выводом расширенной информации
mount -fav
# информация о блочных устройствах
lsblk
# информация о типах фс и метках устройств
blkid
# информация о смонтированных фс и используемом дисковом пространстве
df - h
#linux #mount #fstab #шпаргалка
DeSoft.ru
Автоматическое монтирование файловых систем в Linux с помощью /etc/fstab
Шпаргалка по использованию /etc/fstab для автоматического монтирования файловых систем.
👍4
Дополняю созданный ранее репозиторий со скриптами для сбора информации из
✏️ На этот раз пробуем выгружать и сохранять списки участников публичных каналов, групп, чатов, где состоит пользователь, учетные данные которого используются для работы с
Приведу здесь фрагменты исходного кода. Полная версия демонстрационного скрипта в репозитории.
❗️ Если у пользователя недостаточно прав на получение информации об участниках какого-либо канала или группы, то будет выброшен
✏️ В предыдущей заметке рассматривал примеры поиска сообщений с определенным содержимым (фото, документы, аудио). В данном варианте представлен сбор информации не только о публичном канале и сообщениях в нем, но и о комментариях к каждому посту.
Также привожу фрагменты исходного кода. Полная версия в репозитории.
#telegram #python #telethon
Telegram еще несколькими примерами.✏️ На этот раз пробуем выгружать и сохранять списки участников публичных каналов, групп, чатов, где состоит пользователь, учетные данные которого используются для работы с
Telegram API.Приведу здесь фрагменты исходного кода. Полная версия демонстрационного скрипта в репозитории.
# получаем список каналов, групп, чатов пользователя
result = await client(GetDialogsRequest(
offset_date=None,
offset_id=0,
offset_peer=InputPeerEmpty(),
limit=100,
hash = 0
))
print(result.chats)
# выгружаем список участников конкретного чата
users = await client.get_participants(chat)
print(users)
❗️ Если у пользователя недостаточно прав на получение информации об участниках какого-либо канала или группы, то будет выброшен
Exception с соответствующей информацией.✏️ В предыдущей заметке рассматривал примеры поиска сообщений с определенным содержимым (фото, документы, аудио). В данном варианте представлен сбор информации не только о публичном канале и сообщениях в нем, но и о комментариях к каждому посту.
Также привожу фрагменты исходного кода. Полная версия в репозитории.
# информация о канале по его адресу или id
channel = await client.get_entity(url)
print(channel)
# выгрузка последних 10 постов канала
async for message in client.iter_messages(channel, limit=10):
# выгрузка всех комментариев к конкретному посту
async for comment in client.iter_messages(channel, reply_to=message.id):
print(comment.text)
#telegram #python #telethon
Telegram
DeSoft.ru
Для автоматизации задач сбора информации из каналов, групп, чатов в Telegram, помимо официального API, существуют различного рода и направленности, как платные так и бесплатные, инструменты и библиотеки. В данном цикле заметок рассмотрим примеры работы с…
🔥3👍1
AFFiNE - opensource платформа для заметок и управления проектами, которая выступает в роли альтернативы популярным сервисам
🔎 Установка
Забираем
⚒️ Настройка
🔹 Сервер развернут. По адресу
🔸 Пора переходить в рабочее пространство, но куда, как? Ссылка? - нет, view на каком-то другом порту? - нет, снова прошелся по админке, поискал в документации - никакой информации.
Заметил наличие клиентских приложений на сайте под различные платформы. Видимо, можно с их помощью подключиться к развернутому серверу и начать работу. Установил,
🔹 Вернулся в развернутую ранее админку. Решил перезайти, мало ли какие-то моменты упустил. Прохожу по первоначальной ссылке
🔹 В рабочем пространстве веб приложения аналогичные десктопному способы авторизации, однако тут уже не высылалось никакое подтверждение на почту, а сразу было предложено ввести пароль. Вводим учетные данные, которые регистрировали при первом входе в админку - синхронизация с собственным сервером успешно настроена.
🚀 Работа
➕ С точки зрения функциональности вопросов по минимуму. Простая и удобная комбинация “лучших” практик использования целого набора инструментов, эдакий швейцарский нож. Здесь тебе kanban, таблицы, текстовые заметки, markdown, календарь, виртуальная доска, внутренние ссылки и тэги, совместная работа, локальное и облачное хранилища и многое другое. Отметим, что это всего лишь
➖
Также обнаружил ряд ограничений - максимум 3 подключенных в рабочее пространство пользователя, 10 гб - объем дискового пространства. Спишем недочеты на молодость проекта. Работа активно ведется.
📝 Инструмент однозначно стоит взять на заметку всем, кто ищет альтернативу с заявленными возможностями, лаконично совмещенными в одном приложении.
#management #tools #opensource #selfhosted
Notion и Miro. Для тех, кто знаком с этими инструментами, переход на новое рабочее пространство будет максимально плавным. Имеется self-hosted версия, поэтому смотрим, проверяем.🔎 Установка
Забираем
compose.yml из репозитория проекта, собираем и запускаем:wget https://raw.githubusercontent.com/toeverything/AFFiNE/refs/heads/canary/.github/deployment/self-host/compose.yaml
docker compose up -d
⚒️ Настройка
🔹 Сервер развернут. По адресу
localhost:3100 меня сразу перебросило в панель администратора. Заходим и создаем пользователя. Набор настроек небольшой и в основном касается параметров доступа к серверу. Останавливаться особо тут не на чем.🔸 Пора переходить в рабочее пространство, но куда, как? Ссылка? - нет, view на каком-то другом порту? - нет, снова прошелся по админке, поискал в документации - никакой информации.
Заметил наличие клиентских приложений на сайте под различные платформы. Видимо, можно с их помощью подключиться к развернутому серверу и начать работу. Установил,
Sign up / Sign in окошко отыскал, вводим почту и.. нет, вылетает ссылка на почту для подтверждения регистрации в облачном сервисе разработчиков. Иных вариантов не предлагается.🔹 Вернулся в развернутую ранее админку. Решил перезайти, мало ли какие-то моменты упустил. Прохожу по первоначальной ссылке
localhost:3100 и меня перебрасывает уже не в админку, а в рабочее пространство. Вот оно как оказалось.🔹 В рабочем пространстве веб приложения аналогичные десктопному способы авторизации, однако тут уже не высылалось никакое подтверждение на почту, а сразу было предложено ввести пароль. Вводим учетные данные, которые регистрировали при первом входе в админку - синхронизация с собственным сервером успешно настроена.
🚀 Работа
➕ С точки зрения функциональности вопросов по минимуму. Простая и удобная комбинация “лучших” практик использования целого набора инструментов, эдакий швейцарский нож. Здесь тебе kanban, таблицы, текстовые заметки, markdown, календарь, виртуальная доска, внутренние ссылки и тэги, совместная работа, локальное и облачное хранилища и многое другое. Отметим, что это всего лишь
версия 0.18.➖
Self-hosted версия, как и клиенты, еще сыроваты. Имеются трудности как с синхронизацией, так и с подключением нескольких пользователей (иногда требуется ручное переподключение к серверу синхронизации, а пользователи просто не могут авторизоваться без объяснения причин).Также обнаружил ряд ограничений - максимум 3 подключенных в рабочее пространство пользователя, 10 гб - объем дискового пространства. Спишем недочеты на молодость проекта. Работа активно ведется.
📝 Инструмент однозначно стоит взять на заметку всем, кто ищет альтернативу с заявленными возможностями, лаконично совмещенными в одном приложении.
#management #tools #opensource #selfhosted
👍4
📌 Столкнулся на днях с небольшой задачей по поиску геоданных. Звучит она следующим образом - определить геолокацию и полное название страны по ее двухбуквенному коду (
🔎 Помониторив различные сервисы, в том числе наиболее популярные от Яндекс и Google, стало ясно, что без регистрации тут не обойтись. Также вспомнил про используемую ранее платформу DaData, при помощи которой реализовывал подключение автоподсказок по введенному адресу (бесплатных запросов для ненагруженного приложения более чем достаточно), но для решения текущей задачи соответствующего инструмента не нашлось. Можно было бы поиграться с несколькими запросами цепочкой и собрать информацию воедино, но такие усложнения ни к чему.
Повсеместно распространен подход с регистрацией, предоставлением доступа к API по ключу и лимитами по количеству запросов. В целом, для проверки функциональности, а в дальнейшем и коммерческого использования в своем продукте можно, а в большинстве случаев даже нужно обращаться к подобным ресурсам в связи с наличием техподдержки, поддержанием актуальной информации и непрерывным развитием предоставляемых услуг.
📚 Продолжив поиски, обнаружил отправленный в архив проект
🔨 В один запрос задача получила свое решение без каких-либо лишних манипуляций
В ответе представлена довольна обширная информация о стране, включая сокращенное и полное названия, геолокацию, столицу, часовые пояса, граничащие страны, численность населения, государственный флаг и многое другое.
Полный перечень endpoints смотрим здесь. Искать можно как по кодам всех видов, так и по названиям, валютам, языкам, столицам и так далее.
📝 Очередной инструмент в копилку.
#tools #geo
alpha-2).🔎 Помониторив различные сервисы, в том числе наиболее популярные от Яндекс и Google, стало ясно, что без регистрации тут не обойтись. Также вспомнил про используемую ранее платформу DaData, при помощи которой реализовывал подключение автоподсказок по введенному адресу (бесплатных запросов для ненагруженного приложения более чем достаточно), но для решения текущей задачи соответствующего инструмента не нашлось. Можно было бы поиграться с несколькими запросами цепочкой и собрать информацию воедино, но такие усложнения ни к чему.
Повсеместно распространен подход с регистрацией, предоставлением доступа к API по ключу и лимитами по количеству запросов. В целом, для проверки функциональности, а в дальнейшем и коммерческого использования в своем продукте можно, а в большинстве случаев даже нужно обращаться к подобным ресурсам в связи с наличием техподдержки, поддержанием актуальной информации и непрерывным развитием предоставляемых услуг.
📚 Продолжив поиски, обнаружил отправленный в архив проект
restcountries на github - публичная библиотека информации по странам с открытым API. Создатель проекта какое-то время назад коммерциализировал свое детище, так появился restcountries.eu, однако бесплатную версию подхватили энтузиасты и поддерживают до сих пор. Доступна она по адресу restcountries.com, а репозиторий проекта располагается на gitlab.🔨 В один запрос задача получила свое решение без каких-либо лишних манипуляций
# выгружаем информацию о стране по cca2 коду
curl https://restcountries.com/v3.1/alpha/ru
В ответе представлена довольна обширная информация о стране, включая сокращенное и полное названия, геолокацию, столицу, часовые пояса, граничащие страны, численность населения, государственный флаг и многое другое.
Полный перечень endpoints смотрим здесь. Искать можно как по кодам всех видов, так и по названиям, валютам, языкам, столицам и так далее.
📝 Очередной инструмент в копилку.
#tools #geo
🔥3👍2
Задача о выгрузке информации о странах получила свое продолжение. Для собранных данных о геолокации стран (координаты столицы, крупных городов) необходимо сделать соответствующие отметки на карте.
📝 Имеем географические координаты (широту и долготу) и карту в виде изображения, на которое и нужно нанести метки, т.е.преобразовать точку трехмерного пространства в двумерное, построить проекцию.
📚 С решением задачи нам поможет картографическая проекция Меркатора, а точнее ее вариант WGS 84 / Pseudo-Mercator, который используется в современных картографических приложениях и сервисах.
‼️ Обязательным условием является работа с изображением карты, которое соответствует
Подходящее изображение карты можно взять, например, здесь.
🚀 Перейдем к решению.
Поскольку точка отсчета - это пересечение экватора и нулевого меридиана, а нам удобнее было бы работать с левым верхним углом изображения, как началом координат, то для смещения по оси X используем ложный сдвиг в восточном направлении, а по оси Y ложный сдвиг в северном направлении. Ложный сдвиг - это линейное значение, применяемое к началу координат, которое позволяет гарантировать, что значения по конкретной оси будут положительными, что нам и нужно при работе с изображением.
Сама формула расчета давно известна, я приведу вариант ее реализации на языке
✅ Тестовые данные
✅ Функция построения проекции
✅ Читаем изображение, применяем функцию на тестовых данных, отрисовываем результат и сохраняем
#python #geo
📝 Имеем географические координаты (широту и долготу) и карту в виде изображения, на которое и нужно нанести метки, т.е.преобразовать точку трехмерного пространства в двумерное, построить проекцию.
📚 С решением задачи нам поможет картографическая проекция Меркатора, а точнее ее вариант WGS 84 / Pseudo-Mercator, который используется в современных картографических приложениях и сервисах.
WGS - всемирная геодезическая система, в настоящее время являющаяся стандартном в картографии, геодезии и спутниковой навигации. Согласно этой системе, Земля - эллипсоид, а экватор и нулевой меридиан - опорные точки для широты и долготы соответственно.‼️ Обязательным условием является работа с изображением карты, которое соответствует
WGS 84.Подходящее изображение карты можно взять, например, здесь.
🚀 Перейдем к решению.
Поскольку точка отсчета - это пересечение экватора и нулевого меридиана, а нам удобнее было бы работать с левым верхним углом изображения, как началом координат, то для смещения по оси X используем ложный сдвиг в восточном направлении, а по оси Y ложный сдвиг в северном направлении. Ложный сдвиг - это линейное значение, применяемое к началу координат, которое позволяет гарантировать, что значения по конкретной оси будут положительными, что нам и нужно при работе с изображением.
Сама формула расчета давно известна, я приведу вариант ее реализации на языке
python применительно к задаче, а также чтение и отрисовку тестовых данных с использованием библиотеки opencv. ✅ Тестовые данные
data = [
{"lat": 55.75, "lon": 37.6, "label": "Moscow"},
{"lat": 55.0415, "lon": 82.9346, "label": "Novosibirsk"},
{"lat": 56.8519, "lon": 60.6122, "label": "Yekaterinburg"},
{"lat": 51.3026, "lon": 0.0739, "label": "London"},
{"lat": 48.48, "lon": 2.20, "label": "Paris"},
{"lat": 40.24, "lon": -3.41, "label": "Madrid"},
]
✅ Функция построения проекции
# lat - широта
# lon - долгота
# width - ширина изображения карты
# height - высота изображения карты
def latlon_to_offset(lat, lon, width, height):
# ложный сдвиг в восточном направлении
FALSE_EASTING = 180
# долгота меридиана в точке отсчета
# 0, т.к. у нас точкой отсчета является левый край карты
lon0 = 0
# радиус Земли в проекции
# ширина изображения здесь является длиной окружности
radius = width / (2 * math.pi)
# переводим широту и долготу в радианы
radian_lat = math.radians(lat)
radian_lon = math.radians(lon - lon0 + FALSE_EASTING)
# определяем положение по X
offset_x = radius * radian_lon
# определяем положение по Y относительно экватора
offset_y_from_equator = radius * math.log(math.tan(math.pi / 4 + radian_lat / 2))
# определяем положение по Y относительно верхней границы изображения
offset_y = height / 2 - offset_y_from_equator
return int(offset_x), int(offset_y)
✅ Читаем изображение, применяем функцию на тестовых данных, отрисовываем результат и сохраняем
src = cv2.imread("1084px-Web_maps_Mercator_projection_SW.jpg", cv2.IMREAD_COLOR)
h, w, _ = src.shape
for item in data:
x, y = latlon_to_offset(item["lat"], item["lon"], w, h)
src = cv2.circle(src, (x, y), 5, (0, 0, 255), 2)
cv2.imwrite("result.jpg", src)#python #geo
🔥3
Тема с внедрением инструментов на базе
Однако, существуют решения для локального развертывания, без обращения к внешним ресурсам, без отправки данных на чей-либо сервер при обработке их с помощью так называемого ИИ.
🔥 Одним из таких решений является
📌 Основные возможности: генерация текста, анализ и обработка файлов.
⚒️ Установка и работа
🔸 Приложение можно скачать с официального сайта.
Поддерживаются:
-
-
-
🔸 Интерфейс приложения интуитивно понятен и содержит довольно много подсказок и описаний, чтобы пользователю было проще сориентироваться. Не считая некоторых параметров, которые можно и нужно корректировать в процессе работы с моделями в зависимости от целевой задачи, и которые будут рассмотрены далее, трудностей даже у рядового пользователя возникнуть не должно.
- В разделе
- Скачиваем, модель будет сохранена локально.
- Переходим в чат и выбираем модель, с которой хотим взаимодействовать.
- Начинаем общение.
🚀 Системный требования (рекомендуемые)
-
-
-
- Желательно, но не обязательно, наличие
Доступные мощности накладывают свои ограничения на используемые модели. Стоит отметить, что вопросу оптимизации уделяется отдельное внимание как от разработчиков, так и от создателей моделей, что позволяет запускать языковые модели даже на устройствах с ограниченными ресурсами.
⚙️ Параметры генерации и запуска модели
🔹 Temperature
Отвечает за "творческие способности" модели. При низких значениях модель будет выбирать наиболее вероятные слова - хорошо подходит для задач, требующих точности, при высоких — может выбирать менее предсказуемые варианты, что лучше подойдет для творческих текстов.
✔️ Диапазон:
- 0.0–0.5: Строгие и формальные ответы, минимальная случайность.
- 0.7–0.8: Сбалансированные ответы.
- > 0.8: Неожиданные, творческие ответы.
🔹 Top-P Sampling
Ограничивает выбор слов на основе их совокупной вероятности. Помогает избежать как слишком шаблонных, так и слишком случайных ответов.
✔️ Диапазон:
- 0.1–0.5: Узкий выбор слов, предсказуемые ответы.
- 0.7–0.9: Разнообразные, но логичные ответы.
- 1.0: Без ограничений, модель рассматривает все слова.
🔹 Top-K Sampling
Ограничивает выбор следующего слова количеством наиболее вероятных кандидатов. Например, при Top-K = 40 (значение по умолчанию) модель будет выбирать из 40 самых вероятных слов. Таким образом контролирует точность и предсказуемость генерации, снижается вероятность генерации маловероятных слов.
✔️ Диапазон:
🔹 Context length
Максимальное количество слов, которое модель может учесть и обработать за одну итерацию. Диапазон значений зависит от модели. Корректируется в зависимости от задачи, например, для коротких задач типа вопрос-ответ будет достаточно небольшого значения, тогда как для анализа длинных текстов и диалогов контекст следует расширить, чтобы получить более точные ответы.
✏️ Дополнительные возможности
Приложение
#tools #ai
языковых моделей в рабочие процессы вызывает все больший интерес у специалистов совершенно разных областей. Интерес порождает стремительный рост количества предложений, отсюда множество чат-ботов, сервисов и прочего специализированного ПО на базе ИИ, как правило, платных.Однако, существуют решения для локального развертывания, без обращения к внешним ресурсам, без отправки данных на чей-либо сервер при обработке их с помощью так называемого ИИ.
🔥 Одним из таких решений является
LM Studio - приложение для работы с языковыми моделями прямо на компьютере. Оно позволяет запускать популярные модели, такие как Llama, Mistral, Gemma и другие, без необходимости подключения к интернету. Широкий выбор поддерживаемых моделей дает пользователю гибкость в решении поставленной задачи.📌 Основные возможности: генерация текста, анализ и обработка файлов.
⚒️ Установка и работа
🔸 Приложение можно скачать с официального сайта.
Поддерживаются:
-
Windows (10 и выше, x64)-
macOS (13.4 и выше, Apple Silicon)-
Linux (Ubuntu 20.04 и выше, x64)🔸 Интерфейс приложения интуитивно понятен и содержит довольно много подсказок и описаний, чтобы пользователю было проще сориентироваться. Не считая некоторых параметров, которые можно и нужно корректировать в процессе работы с моделями в зависимости от целевой задачи, и которые будут рассмотрены далее, трудностей даже у рядового пользователя возникнуть не должно.
- В разделе
Discover выбираем подходящую модель из предложенного списка или ищем любую другую с Hugging face по названию / автору.- Скачиваем, модель будет сохранена локально.
- Переходим в чат и выбираем модель, с которой хотим взаимодействовать.
- Начинаем общение.
🚀 Системный требования (рекомендуемые)
-
16+ Гб RAM-
CPU с поддержкой AVX2 (для Windows и Linux)-
Apple Silicon (для macOS)- Желательно, но не обязательно, наличие
GPU с поддержкой CUDA или AMD ROCm.Доступные мощности накладывают свои ограничения на используемые модели. Стоит отметить, что вопросу оптимизации уделяется отдельное внимание как от разработчиков, так и от создателей моделей, что позволяет запускать языковые модели даже на устройствах с ограниченными ресурсами.
⚙️ Параметры генерации и запуска модели
🔹 Temperature
Отвечает за "творческие способности" модели. При низких значениях модель будет выбирать наиболее вероятные слова - хорошо подходит для задач, требующих точности, при высоких — может выбирать менее предсказуемые варианты, что лучше подойдет для творческих текстов.
✔️ Диапазон:
0.0 – 1.0- 0.0–0.5: Строгие и формальные ответы, минимальная случайность.
- 0.7–0.8: Сбалансированные ответы.
- > 0.8: Неожиданные, творческие ответы.
🔹 Top-P Sampling
Ограничивает выбор слов на основе их совокупной вероятности. Помогает избежать как слишком шаблонных, так и слишком случайных ответов.
✔️ Диапазон:
0.0–1.0- 0.1–0.5: Узкий выбор слов, предсказуемые ответы.
- 0.7–0.9: Разнообразные, но логичные ответы.
- 1.0: Без ограничений, модель рассматривает все слова.
🔹 Top-K Sampling
Ограничивает выбор следующего слова количеством наиболее вероятных кандидатов. Например, при Top-K = 40 (значение по умолчанию) модель будет выбирать из 40 самых вероятных слов. Таким образом контролирует точность и предсказуемость генерации, снижается вероятность генерации маловероятных слов.
✔️ Диапазон:
1–500🔹 Context length
Максимальное количество слов, которое модель может учесть и обработать за одну итерацию. Диапазон значений зависит от модели. Корректируется в зависимости от задачи, например, для коротких задач типа вопрос-ответ будет достаточно небольшого значения, тогда как для анализа длинных текстов и диалогов контекст следует расширить, чтобы получить более точные ответы.
✏️ Дополнительные возможности
Приложение
LM Studio позволяет запустить локальный REST API сервер для взаимодействия с моделями через запросы. Если рассматриваете интеграцию своего приложения с сервисом языковых моделей, то это отличная возможность поэкспериментировать.#tools #ai
lmstudio.ai
LM Studio Bionic - Agent for Work and Code
Bionic is LM Studio's agent for work and code. Create documents, slides, PDFs, and software with local or frontier open models.
👍2🔥2
Для передачи файлов между распределенными устройствами и пользователями в повседневной работе как правило используются различные сервисы и инструменты, например, мессенджеры или электронная почта для мелких файлов, облачные хранилища и файлообменники для больших. Варианты безусловно удобные и быстрые, однако, в таком случае, чтобы была возможность поделиться файлами с кем-то еще, они оказываются на “чужом” сервере, где ничто не мешает владельцу этого самого сервера распорядиться ими по своему усмотрению.
🔥 Для устранения необходимости в посредниках при обмене данными существует специализированная библиотека с открытым исходным кодом Magic Wormhole на
⚡️
📌 Обязательными компонентами
▫️ Сервер-ретранслятор для обмена служебными сообщениями между клиентам Magic Wormhole Mailbox Server.
▫️ Транзитный сервер Magic Wormhole Transit Relay, задача которого “склеить” два клиентских сокета по запросу, если это не удалось сделать напрямую.
В библиотеке адреса двух серверов разработчика системы прописаны по умолчанию. Они могут быть развернуты на своем хостинге, что еще больше повысит надежность обмена.
📌 Библиотека поставляется вместе с консольной утилитой
🔹 Установка
🔹 Отправка файла
Будет сформирован одноразовый код, который необходимо сообщить получателю.
🔹 Получение файла
Вводим одноразовый код и получаем файл.
🔹 Явное указание адресов сервера-ретранслятора и транзитного сервера
Другая сторона должна указать эти же параметры при получении.
📌 Реализация протокола
#tools #security
🔥 Для устранения необходимости в посредниках при обмене данными существует специализированная библиотека с открытым исходным кодом Magic Wormhole на
python, основанная на одноименном протоколе. Назначение - прямая передача файлов, каталогов или текстовых сообщений между двумя устройствами в зашифрованном виде с использованием уникальных одноразовых кодов, которые генерируются для каждой сессии передачи.⚡️
Magic Wormhole использует PAKE (Password Authenticated Key Exchange) - протокол обмена ключами, при котором используется пароль для создания общего ключа на каждой из сторон с дальнейшей его верификацией, который используется для шифрования пересылаемых данных.📌 Обязательными компонентами
Magic Wormhole являются:▫️ Сервер-ретранслятор для обмена служебными сообщениями между клиентам Magic Wormhole Mailbox Server.
▫️ Транзитный сервер Magic Wormhole Transit Relay, задача которого “склеить” два клиентских сокета по запросу, если это не удалось сделать напрямую.
В библиотеке адреса двух серверов разработчика системы прописаны по умолчанию. Они могут быть развернуты на своем хостинге, что еще больше повысит надежность обмена.
📌 Библиотека поставляется вместе с консольной утилитой
wormhole. На примере ее работы можно оценить простоту использования протокола.🔹 Установка
# Debian / Ubuntu
sudo apt install magic-wormhole
Magic Wormhole доступна под разные операционные системы. Подробнее о способах установки здесь.🔹 Отправка файла
# wormhole send [args] --text TEXT
# wormhole send [args] FILENAME
# wormhole send [args] DIRNAME
wormhole send myfile.txt
Будет сформирован одноразовый код, который необходимо сообщить получателю.
🔹 Получение файла
# wormhole receive [args]
wormhole receive
Вводим одноразовый код и получаем файл.
🔹 Явное указание адресов сервера-ретранслятора и транзитного сервера
wormhole send --relay-url=ws://<server ip>:4000/v1 --transit-helper=tcp:[<server ip>]:4001 myfile.txt
Другая сторона должна указать эти же параметры при получении.
📌 Реализация протокола
Magic Wormhole была адаптирована в виде библиотеки и под другие языки, а также разработаны клиентские приложения на их основе, включая мобильные. Полный перечень библиотек и приложений можно посмотреть в документации.#tools #security
GitHub
GitHub - magic-wormhole/magic-wormhole-mailbox-server: the rendezvous/mailbox server for magic-wormhole clients
the rendezvous/mailbox server for magic-wormhole clients - magic-wormhole/magic-wormhole-mailbox-server
👍4🔥2
DeSoft.ru
Тема с внедрением инструментов на базе языковых моделей в рабочие процессы вызывает все больший интерес у специалистов совершенно разных областей. Интерес порождает стремительный рост количества предложений, отсюда множество чат-ботов, сервисов и прочего …
Еще одним внушительным инструментом для работы с ИИ локально является платформа
📌 Основные особенности
1) Агрегатор провайдеров языковых моделей
2) Визуальный анализ
Закинули изображение в чат и запросили описание или генерацию промпта по нему для дальнейшего использования. Реализуется путем интеграции с моделями распознавания, например,
3) Преобразование текста в речь и речи в текст (
4) Генерация изображений из текста. Интеграция с
5) Система плагинов
Расширение возможностей чатов за счет подключения дополнительных функций, например календарь, погода, поисковая система, генерация изображений, новостные сводки, переводчики и многое другое. Находим нужный плагин в
6) База ассистентов, т.е. подготовленных промптов для решения конкретных узкоспециализированных задач.
На данный момент набор ассистентов содержит
7) Локальное использование моделей
Осуществляется путем интеграции с ollama - популярным у исследователей инструментом локального запуска языковых моделей, который, в том числе, предоставляет
8) Многопользовательский доступ
9) Использование технологии `PWA` (Progressive Web Apps), что позволяет адаптировать приложение под различные платформы, в том числе мобильные.
🚀 Попробовать приложение можно в облаке или же развернуть локально
▫️ Разворачиваем локально с помощью docker только веб-приложение. Вся история взаимодействия и настройки хранятся во встроенной в браузер базе данных
▫️ Для подключения распределенной базы данных, работы с документами и формирования собственной “базы знаний”
✖️ Из минусов отмечу слабую локализацию на русский язык - выглядит как автоматический перевод, в большинстве случаев сложно разобрать о чем идет речь в том или ином описании.
✅ Платформа ориентирована на максимально простой и удобный способ собрать воедино зоопарк площадок, сервисов и инструментов для работы с искусственным интеллектом. Большинство интеграций требуют наличия аккаунтов для доступа к платным функциям известных решений, что накладывает некоторые ограничения. Однако, ряд существующих бесплатных компонентов, а также работа с языковыми моделями локально, позволяют использовать систему вполне полноценно.
#tools #ai
LobeChat. Это целый комплекс возможностей, объединенных в одном, красиво оформленном и интуитивно понятном веб-приложении.📌 Основные особенности
1) Агрегатор провайдеров языковых моделей
LobeChat предоставляет доступ к популярным чат-ботам, таким как ChatGPT, Gemini, Groq, Claude и другие, объединяя все это в одном рабочем пространстве.2) Визуальный анализ
Закинули изображение в чат и запросили описание или генерацию промпта по нему для дальнейшего использования. Реализуется путем интеграции с моделями распознавания, например,
gpt-4-vision или gemini-pro-vision.3) Преобразование текста в речь и речи в текст (
OpenAI Audio). 4) Генерация изображений из текста. Интеграция с
DALL-E, MidJourney или бесплатным решением от Pollinations.5) Система плагинов
Расширение возможностей чатов за счет подключения дополнительных функций, например календарь, погода, поисковая система, генерация изображений, новостные сводки, переводчики и многое другое. Находим нужный плагин в
Plugin Store, устанавливаем, подключаем к конкретному чату.6) База ассистентов, т.е. подготовленных промптов для решения конкретных узкоспециализированных задач.
На данный момент набор ассистентов содержит
более 400 решений, разбитых на категории по разным направлениям, которая периодически пополняется и обновляется силами независимых исследователей и организаций.7) Локальное использование моделей
Осуществляется путем интеграции с ollama - популярным у исследователей инструментом локального запуска языковых моделей, который, в том числе, предоставляет
API для взаимодействия.8) Многопользовательский доступ
9) Использование технологии `PWA` (Progressive Web Apps), что позволяет адаптировать приложение под различные платформы, в том числе мобильные.
🚀 Попробовать приложение можно в облаке или же развернуть локально
▫️ Разворачиваем локально с помощью docker только веб-приложение. Вся история взаимодействия и настройки хранятся во встроенной в браузер базе данных
indexedDb.▫️ Для подключения распределенной базы данных, работы с документами и формирования собственной “базы знаний”
LobeChat поставляется с набором сопутствующих сервисов (сервер управления доступом Casdoor, база данных PostgreSQL и s3 хранилище MinIO). Используем подготовленный docker-compose со всем необходимым.✖️ Из минусов отмечу слабую локализацию на русский язык - выглядит как автоматический перевод, в большинстве случаев сложно разобрать о чем идет речь в том или ином описании.
✅ Платформа ориентирована на максимально простой и удобный способ собрать воедино зоопарк площадок, сервисов и инструментов для работы с искусственным интеллектом. Большинство интеграций требуют наличия аккаунтов для доступа к платным функциям известных решений, что накладывает некоторые ограничения. Однако, ряд существующих бесплатных компонентов, а также работа с языковыми моделями локально, позволяют использовать систему вполне полноценно.
#tools #ai
👍2🔥1
🔎 Рассмотренный ранее
1️⃣ Rymdport. Мультиплатформенное десктопное приложение под Windows / Linux / macOS / FreeBSD с открытым исходным кодом. Для реализации протокола используется библиотека на
Максимально простое приложение - запустил, закинул файл, передал сгенерированный код получателю, отследил прогресс и статус отправления. В разделе с настройками можно прописать собственные адреса сервера-ретранслятора и транзитного сервера.
2️⃣ Wormhole File Transfer. Мобильное приложение с открытым исходным кодом для
3️⃣ Кроссплатформенный графический клиент Destiny. Реализован на
4️⃣ Веб-клиент от команды разработчиков
📝 Если к первым трем клиентам вопросов не возникло, все соответствует заявленной функциональности, поставил и протестировал передачу данных, используя в том числе собственные служебные серверы, то вот с
✅ Наличие немалого числа вариантов позволяют выбрать и установить или вовсе собрать самостоятельно определенную версию клиента, подходящего именно под ваши рабочие платформы и устройства. Сам процесс передачи данных никак не отличается в зависимости от реализации, что позволяет комбинировать приложения разных авторов для выполнения поставленной задачи.
#tools #security
cli клиент для безопасной передачи данных это конечно замечательно, но не так удобно для повседневного использования, если терминал не ваш основной инструмент. Попробовал несколько клиентов из списка от разных разработчиков и на базе разных библиотек, реализующих протокол Magic Wormhole.1️⃣ Rymdport. Мультиплатформенное десктопное приложение под Windows / Linux / macOS / FreeBSD с открытым исходным кодом. Для реализации протокола используется библиотека на
golang wormhole-willian.Максимально простое приложение - запустил, закинул файл, передал сгенерированный код получателю, отследил прогресс и статус отправления. В разделе с настройками можно прописать собственные адреса сервера-ретранслятора и транзитного сервера.
2️⃣ Wormhole File Transfer. Мобильное приложение с открытым исходным кодом для
Android, опубликованное в Google Play и F-Droid. В основе реализации протокола лежит библиотека magic-wormhole.rs на Rust. Аналогично Rymdport - ничего лишнего, только целевые функции для передачи / приема файлов с возможностью настройки рабочих серверов.3️⃣ Кроссплатформенный графический клиент Destiny. Реализован на
Flutter. Мобильные версии размещены во всех популярных магазинах, десктопные в релизах на гитхабе. По функциональности добавить нечего.4️⃣ Веб-клиент от команды разработчиков
Destiny - Winden. Как и у Destiny, реализация протокола базируется на wormhole-willian.📝 Если к первым трем клиентам вопросов не возникло, все соответствует заявленной функциональности, поставил и протестировал передачу данных, используя в том числе собственные служебные серверы, то вот с
Winden пришлось повозиться, чтобы развернуть его локально. Сборка оказалась куда сложнее, чем просто docker compose up -d в связи с множественными падениями из-за “недоустановленных” модулей и пакетов, которые подкидываются чуть ли не вручную. Приложение в beta версии, последней релизной версии уже год, много тестового окружения внутри, некий сервис обратной связи для сбора отзывов после каждой отправки / получения файлов. На основе выше перечисленного создается впечатление, что продукт ушел в коммерциализацию, а его opensource версия существует лишь для публичного теста.✅ Наличие немалого числа вариантов позволяют выбрать и установить или вовсе собрать самостоятельно определенную версию клиента, подходящего именно под ваши рабочие платформы и устройства. Сам процесс передачи данных никак не отличается в зависимости от реализации, что позволяет комбинировать приложения разных авторов для выполнения поставленной задачи.
#tools #security
Telegram
DeSoft.ru
Для передачи файлов между распределенными устройствами и пользователями в повседневной работе как правило используются различные сервисы и инструменты, например, мессенджеры или электронная почта для мелких файлов, облачные хранилища и файлообменники для…
👍4
📚 Пополняю коллекцию шпаргалок списком основных команд для работы с
🔷 Images
🔷 Containers
🔷 Сбор информации о контейнерах
🔷 Volumes
🔷 Networks
🔷 Docker compose
🔷 Системная информация
🔷 Очистка
#docker #шпаргалка
Docker.🔷 Images
# список образов
docker images
# скачиваем образ из Docker Hub
docker pull <name>
# собираем образ из Dockerfile в текущей директории
docker build .
# с присвоением тега
docker build -t <name>:<tag> .
# с указанием пути до Dockerfile
docker build -f path/to/Dockerfile
# удаляем образ по id
docker rmi <image_id>
🔷 Containers
# список всех запущенных контейнеров
docker ps
# список всех контейнеров, в том числе остановленных
docker ps -a
# запускаем контейнер по id или имени
docker start <name / id>
# останавливаем контейнер
docker stop <name / id>
# перезапускаем контейнер
docker restart <name / id>
# удаляем контейнер
docker rm <name / id>
# создаем и запускаем новый контейнер в фоновом режиме с загрузкой образа если необходимо
docker run -d --name <container_name> <image_name>
# с пробросом портов
docker run -d -p <host_port>:<container_port> <image_name>
# с монтированием директории или тома
docker run -d -v <host_dir / volume>:<container_dir> <image_name>
# подключаемся к запущенному контейнеру
docker attach <name / id>
# подключаем к контейнеру с созданием новой shell сессии
docker exec -it <container name / id> sh
🔷 Сбор информации о контейнерах
# смотрим логи контейнера
docker logs <name / id>
# в реальном времени
docker logs -f <name / id>
# последние 10 строк логов
docker logs -n 10 <name / id>
# системные ресурсы, используемые контейнером
docker stats <name / id>
# запущенные процессы в контейнере
docker top <name / id>
# детальная информация о контейнере
docker inspect <name / id>
🔷 Volumes
# список томов
docker volume ls
# создаем том
docker volume create <name>
# информация о томе
docker volume inspect <name>
# удаляем том
docker volume rm <name>
🔷 Networks
# список сетей
docker network ls
# создаем новую сеть
docker network create <network_name>
# подключаем контейнер к сети
docker network connect <network_name> <container name / id>
# отключаем контейнер от сети
docker network disconnect <network_name> <container name / id>
# информация о сети
docker network inspect <network_name>
# удаляем сеть
docker network rm <network_name>
🔷 Docker compose
# запускаем сервисы, указанные в docker-compose.yml / compose.yml
docker compose up
# в фоновом режиме
docker compose up -d
# с пересборкой образов, если были какие-либо изменения
docker compose up -d --build
# с принудительным пересозданием контейнеров, даже если не было изменений
docker compose up -d --build --force-recreate
# с удалением контейнеров, которых нет в compose, но были при предыдущих запусках
docker compose up -d --remove-orphans
# останавливаем и удаляем контейнеры, сети, тома и образы, созданные при up
docker compose down
# список запущенных сервисов через compose
docker compose ps
# список всех запущенных проектов compose
docker compose ls
# собираем / пересобираем образы
docker compose build
# смотрим логи сервисов
docker compose logs
🔷 Системная информация
# общая информация
docker system info
# занятое дисковое пространство
docker system df
🔷 Очистка
# удаляем все dangling (без тегов и ни к чему не привязанные) образы
docker image prune
# удаляем все неиспользуемые образы, в том числе dangling
docker image prune -a
# удаляем все остановленные контейнеры
docker container prune
# удаляем неиспользуемые контейнерами тома
docker volume prune
# удаляем неиспользуемые сети
docker network prune
# очищаем builder кэш
docker builder prune
# очищаем все неиспользуемое - образы, контейнеры, сети, кэш, тома
docker system prune
#docker #шпаргалка
👍7
📌 Для тех кто ищет альтернативу платным / более недоступным сервисам, или просто хочет разместить аналог на своем сервере для пущей надежности, можно воспользоваться сервисом Open-source builders. Не нашли нужный вариант? Загляните в раздел
📌 Также порекомендую подборку проектов Awesome-Selfhosted, где предлагаются решения с открытым исходным кодом под конкретные задачи с возможностью размещения на своем железе. Сам периодически пользуюсь этим каталогом дабы найти узкоспециализированные инструменты. Список категоризирован, каждый проект с кратким описанием, ссылками и типами лицензий.
#полезное
Requests, оставьте заявку или полистайте созданные ранее обращения, возможно, кто-то уже ранее интересовался чем-то подобным.📌 Также порекомендую подборку проектов Awesome-Selfhosted, где предлагаются решения с открытым исходным кодом под конкретные задачи с возможностью размещения на своем железе. Сам периодически пользуюсь этим каталогом дабы найти узкоспециализированные инструменты. Список категоризирован, каждый проект с кратким описанием, ссылками и типами лицензий.
#полезное
opensource.builders
opensource.builders - Find Open Source Alternatives
Discover open source alternatives to popular proprietary software.
🔥4👍1
При разработке программных продуктов мы так или иначе взаимодействуем с различными ресурсами, сервисами, базами данных как внутри ИТ инфраструктуры компании, так и за ее пределами. Для получения доступа к этим ресурсам используются
⚠️ В угоду скорости или удобству, по невнимательности или неопытности, непосредственные участники процесса (разработчики, тестировщики, администраторы) могут оставить
📌 Поиск по ключевым словам
Простой, но действенный способ обнаружить забытые в коде
📌 Gitleaks
Gitleaks - утилита с открытым исходным кодом для мониторинга конкретных репозиториев, каталогов, файлов. Позволяет автоматизировать процесс контроля за возможными утечками секретов как при самостоятельной разработке на каких-либо одиночных проектах, так и внутри хранилища исходного кода большой команды или целой компании. Важной особенностью здесь является проверка всей истории проекта, а не только актуального состояния.
Поддерживается большинство популярных платформ, включая вариант с использованием
💻 Несколько примеров работы с программой
✅ Сканируем
✅ Проверяем директорию
✅ Передаем в
💡 Автоматизировать процесс можно благодаря хуку на
📌 gitGrabber
В дополнение к
Инструмент не анализирует историю репозиториев, работает на регулярных выражениях, умеет слать уведомления о своих находках.
🌎 Применение специализированных инструментов мониторинга позволяет снизить риск непреднамеренного попадания учетных данных в публичное пространство или же своевременно отреагировать на возникшие инциденты. Следует отметить, что отслеживание ни в коем случае не освобождает от такой важной задачи, как управление секретами, обеспечение хранения и безопасного доступа к ним.
#security #leaks
секреты - ключи, токены, логины и пароли и прочее, т.е. разного рода конфиденциальные данные для аутентификации, заполучив которые, злоумышленники откроют для себя возможность беспрепятственного сбора информации.⚠️ В угоду скорости или удобству, по невнимательности или неопытности, непосредственные участники процесса (разработчики, тестировщики, администраторы) могут оставить
секреты в открытом виде прямо в коде или конфигурационных файлах. После публикации такого проекта на платформе для размещения исходного кода, например, github или gitlab, секреты становятся доступными всем желающим. Даже если на очередной итерации вы “прибрали за собой”, то история проекта помнит все. Таким образом, помимо управления секретами, возникает необходимость проверки кода на наличие секретов в открытом виде.📌 Поиск по ключевым словам
Простой, но действенный способ обнаружить забытые в коде
секреты - поиск по ключевым словам. Составляем список слов, например, password, key, private, token и так далее, используем grep по содержимому проекта или поисковую систему на площадке размещения. Чем больше проект и чем больше в нем участников, тем сложнее будет полагаться только на ручную проверку.📌 Gitleaks
Gitleaks - утилита с открытым исходным кодом для мониторинга конкретных репозиториев, каталогов, файлов. Позволяет автоматизировать процесс контроля за возможными утечками секретов как при самостоятельной разработке на каких-либо одиночных проектах, так и внутри хранилища исходного кода большой команды или целой компании. Важной особенностью здесь является проверка всей истории проекта, а не только актуального состояния.
Поддерживается большинство популярных платформ, включая вариант с использованием
docker. Попробовал готовые сборки под Windows и Linux. Долго разбираться не пришлось, параметры запуска описаны в официальном репозитории проекта. Единственное с чем могут возникнуть трудности, так это с формированием собственных правил поиска на основе регулярных выражений, однако в большинстве случаев будет достаточно конфигурационного файла по умолчанию, количество поддерживаемых вариантов секретов накопилось довольно серьезное за время существования проекта.💻 Несколько примеров работы с программой
✅ Сканируем
git репозиторий, включая полную историю# с выводом всей информации в консоль
gitleaks git -v
# с сохранением отчета в файл
gitleaks git --report-path gitleaks-report.json
✅ Проверяем директорию
gitleaks dir -v path/to/dir
✅ Передаем в
gitleaks поток на анализ# windows
type mysecretkey.pem | gitleaks -v stdin
# linux
cat mysecretkey.pem | gitleaks -v stdin
💡 Автоматизировать процесс можно благодаря хуку на
pre-commit, за счет которого на каждый git commit будет выполняться проверка через gitleaks. Процесс настройки описан в README. Очень полезная опция.📌 gitGrabber
В дополнение к
gitleaks упомяну и gitGrabber - отслеживает последние индексируемые github файлы по мере их появления, что позволяет узнать об упоминании о вашем проекте, сервисе, организации, домене и тому подобное. Зачем это нужно? Источником утечек не обязательно являются сотрудники именно вашей команды или компании, ими в точно такой же степени могут оказаться пользователи, поставщики услуг, фрилансеры, с которыми вы работаете или работали, и о существовании публичного профиля которых ничего неизвестно.Инструмент не анализирует историю репозиториев, работает на регулярных выражениях, умеет слать уведомления о своих находках.
🌎 Применение специализированных инструментов мониторинга позволяет снизить риск непреднамеренного попадания учетных данных в публичное пространство или же своевременно отреагировать на возникшие инциденты. Следует отметить, что отслеживание ни в коем случае не освобождает от такой важной задачи, как управление секретами, обеспечение хранения и безопасного доступа к ним.
#security #leaks
GitHub
GitHub - gitleaks/gitleaks: Find secrets with Gitleaks 🔑
Find secrets with Gitleaks 🔑. Contribute to gitleaks/gitleaks development by creating an account on GitHub.
🔥2👍1
‼️ На днях популярная ИИ библиотека ultralytics была скомпрометирована, причем дважды. В версиях
Вместе с установкой библиотеки загружается и запускается
✅ Проверяем версию установленного пакета. Если она среди скомпрометированных - удаляем.
✅ Ищем и убиваем вредоносный процесс
На сегодняшний день скомпрометированные пакеты уже удалены из сборок библиотеки, а также выпущены несколько обновленных версий с экстренными патчами безопасности, однако, рекомендуется пока повременить с обновлениями и воспользоваться одним из предыдущих выпусков, например,
Источники: [1], [2], [3]
#security #leaks
8.3.41 и 8.3.42 pip пакета обнаружили криптомайнер, пропатчили, а после, в версиях 8.3.45 и 8.3.46 злоумышленники снова повторили свою атаку. Судя по комментариям исследователей, целью атаки были машины и серверы на Linux и macOS, Windows же затронут не был. Вместе с установкой библиотеки загружается и запускается
XMRig майнер в /tmp/ultralytics_runner. Заметить подозрительную активность оказалось несложно - резкий скачок загрузки цп после установки тому свидетельство. ✅ Проверяем версию установленного пакета. Если она среди скомпрометированных - удаляем.
pip show ultralytics
pip uninstall ultralytics
✅ Ищем и убиваем вредоносный процесс
/tmp/ultralytics_runner (ps -a). Удаляем исполняемый файл.На сегодняшний день скомпрометированные пакеты уже удалены из сборок библиотеки, а также выпущены несколько обновленных версий с экстренными патчами безопасности, однако, рекомендуется пока повременить с обновлениями и воспользоваться одним из предыдущих выпусков, например,
8.3.40 и младше.Источники: [1], [2], [3]
#security #leaks
GitHub
GitHub - ultralytics/ultralytics: Ultralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation…
Ultralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking - ultralytics/ultralytics
🤯3👍1
Источников контента, новостных сайтов и каналов на сегодняшний день столько, что охватить весь объем становится проблематично, а отыскать что-то действительно ценное еще сложнее. Трудностей в освоении материала добавляет необходимость перепрыгивать с ленты на ленту, из приложения в приложение и по множеству вкладок в браузере в придачу.
📝 Для формирования краткой сводки по новостям давно существуют
⚡️ Tiny Tiny RSS
В качестве
🔹 Установка
▫️ Имеем виртуальную машину на
▫️ Забираем с официального сайта
▫️ Внесем несколько правок в переменные окружения, поскольку планируем использовать только в локальной сети
▫️ Собираем и запускаем
🔹 Проверка
По адресу виртуальной машины идем в приложение через порт
⚡️ RSSHub
Для многих авторов
🔹 Установка
▫️ Разворачивается также в контейнерах. Скачиваем docker-compose.yml.
▫️ Поскольку reverse proxy не используем, https нам тоже без надобности, то необходимо выставить внешним 80й порт для основного контейнера вместо проставленного по умолчанию 1200, тогда ранее установленный агрегатор успешно подхватит все формируемые через
▫️ Собираем и запускаем
🔹Проверка
Заходим по адресу виртуальной машины и видим страницу приветствие - сервис успешно запущен. Никаких манипуляций непосредственно с
🔹Создание rss-ленты из Telegram-канала
▫️ Возвращаемся в
▫️ Для преобразования канала в
Выглядит она следующим образом:
, где host - адрес виртуальной машины, на которой развернут
▫️ В итоге получаем ссылку:
▫️ Добавляем ее в подписки в
🔎 Как я упомянул ранее,
#tools #opensource #selfhosted #rss
📝 Для формирования краткой сводки по новостям давно существуют
RSS-ленты, а для автоматического сбора сообщений из них различные специализированные приложения и сервисы. Я приведу вариант размещения подобного агрегатора на собственном сервере, а также способ представления Telegram-каналов в виде RSS-лент с подключением к этому серверу.⚡️ Tiny Tiny RSS
В качестве
RSS сервера будем использовать проект с открытым исходным кодом - Tiny Tiny RSS. В основе лежит минималистичное веб-приложение для сбора и чтения RSS-лент. Поддерживает категоризацию, метки, различные фильтры, варианты представления, кастомные темы и расширения за счет плагинов. Быстро и просто разворачивается с помощью docker.🔹 Установка
▫️ Имеем виртуальную машину на
Debian 12 с предварительно установленным docker.▫️ Забираем с официального сайта
.env и docker-compose.yml файлы.▫️ Внесем несколько правок в переменные окружения, поскольку планируем использовать только в локальной сети
ADMIN_USER_PASS=admin
ADMIN_USER_PASS_ACCESS_LEVEL=10
HTTP_PORT=8280
▫️ Собираем и запускаем
docker compose up -d
🔹 Проверка
По адресу виртуальной машины идем в приложение через порт
8280. Здесь все интуитивно понятно - создаем новую подписку - добавляем либо адрес rss-ленты (например, https://3dnews.ru/news/rss/), либо просто ссылку на сайт (https://3dnews.ru), а приложение попробует найти его ленту и добавит в список. Настраиваем удобный вид отображения и тему, листаем сотни подгруженных новостей.⚡️ RSSHub
Для многих авторов
Telegram стал чуть ли не основной площадкой публикации собственного контента, однако, не каждый заводит отдельный сайт для дублирования своего творчества, а следовательно и подписаться на сводку новостей напрямую, без подписки на канал через мессенджер, не представляется возможным. В данном случае нам поможет еще один open source инструмент - RSSHub, с помощью которого разного рода площадки, будь то социальные сети, видеохостинги или мессенджеры, могут быть представлены в виде RSS-ленты.🔹 Установка
▫️ Разворачивается также в контейнерах. Скачиваем docker-compose.yml.
▫️ Поскольку reverse proxy не используем, https нам тоже без надобности, то необходимо выставить внешним 80й порт для основного контейнера вместо проставленного по умолчанию 1200, тогда ранее установленный агрегатор успешно подхватит все формируемые через
RSSHub ленты.services:
rsshub:
image: diygod/rsshub
restart: always
ports:
- "80:1200"
...
▫️ Собираем и запускаем
docker compose up -d
🔹Проверка
Заходим по адресу виртуальной машины и видим страницу приветствие - сервис успешно запущен. Никаких манипуляций непосредственно с
RSSHub больше делать не требуется.🔹Создание rss-ленты из Telegram-канала
▫️ Возвращаемся в
Tiny Tiny RSS. Предположим, что мы хотим добавить в каталог источников Telegram-канал Хабра https://t.me/habr_com.▫️ Для преобразования канала в
RSS-ленту, нам нужно сформировать ссылку, используя роутинг RSSHub.Выглядит она следующим образом:
http://{host}/telegram/channel/{tg channel name}, где host - адрес виртуальной машины, на которой развернут
RSSHub (192.168.1.134 в моем случае), а tg channel name - имя Telegram-канала (habr_com).▫️ В итоге получаем ссылку:
http://192.168.1.134/telegram/channel/habr_com
▫️ Добавляем ее в подписки в
Tiny Tiny RSS и проверяем выгрузку новостей.🔎 Как я упомянул ранее,
RSSHub дает возможность привязать не только Telegram, но и другие популярные ресурсы как источники публикаций в вашу собственную ленту. Ряд сопутствующих проектов позволяют упростить и автоматизировать эту процедуру. Подробная информация об особенностях системы представлена в официальной документации.#tools #opensource #selfhosted #rss
👍3🔥3
Запустив на днях одну из тестовых виртуальных машин, заметил, что свободного места практически не осталось, хотя никаких тяжелых данных там никогда не хранилось, пользовался ей лишь для сборки и запуска различных контейнеров, так что принялся очищать накопленное, в первую очередь,
В локальном хранилище образов было немало тяжеловесов на основе базовых образов систем, например,
📝 Исходя из вышеописанного, несколько замечаний на тему сборки образа в контексте скорости и итогового размера. Список далеко не исчерпывающий, а содержит лишь основные моменты.
1️⃣ Выбор специализированных урезанных образов против образов, основанных на полных дистрибутивах систем
▫️
▫️
▫️
2️⃣ Многоэтапная сборка
Разделение процесса сборки приложения на отдельные шаги, по завершению которых, на следующий шаг переносится только полученный результат, а не весь комплект сопутствующих программ и зависимостей.
3️⃣ Исключение лишних данных из сборочного процесса с помощью .dockerignore
4️⃣ Использование официальных образов
Официальные образы от разработчиков систем и разного рода инструментария с довольно высокой периодичностью обновляются, долгое время поддерживаются, а также проверены тысячами пользователей, что нельзя сказать о неофициальных сборках от энтузиастов, а вместе с ними и злоумышленников, которые плодят тысячи собственных творений дабы поделиться с окружающими.
⚒️ Пример двухэтапной сборки
💥 В итоге получился образ размером 165 Мб, содержащий 135 установленных пакетов и 814 исполняемых файлов. Не такой уж и чистый, но по сравнению со стандартным образом, значительно меньше.
⚒️ Пример трехэтапной сборки
💥 Размер полученного образа 29 Мб. Содержит 38 модулей проекта и 1 исполняемый файл.
💡 Безопасность систем контейнеризации - отдельная большая тема, однако, в разрезе приведенных примеров (скорее второго приведенного примера, т.к. в первом случае множество исполняемых файлов и библиотек - это, очевидно, кладезь уязвимостей), первый шаг в сторону ее обеспечения был сделан - минимизация вероятности попадания уязвимых зависимостей в контейнер.
#docker
docker платформой (см. шпаргалку по командам для инспекции и очистки системы).В локальном хранилище образов было немало тяжеловесов на основе базовых образов систем, например,
python3.10-bookworm размером под 800 Мб или golang:1.22.4-bookworm под 1.2 Гб. По их содержимому даже пробегаться страшно - помимо установленных дополнительно, полный набор пакетов и зависимостей, поставляемых с основной системой, причем давно устаревших, а значит потенциально уязвимых.📝 Исходя из вышеописанного, несколько замечаний на тему сборки образа в контексте скорости и итогового размера. Список далеко не исчерпывающий, а содержит лишь основные моменты.
1️⃣ Выбор специализированных урезанных образов против образов, основанных на полных дистрибутивах систем
▫️
slim - уменьшенная версия стандартного образа системы с удалением ненужных пакетов, компонентов, зависимостей.▫️
alpine - образ на основе облегченного, минималистичного дистрибутива Alpine Linux. Еще меньше, чем slim, использует специальные версии стандартной библиотеки musl libc и Busybox для пущей миниатюрности.▫️
scratch - образ-пустышка. Идеальный вариант для запуска приложений, не требующих никакого окружения, внешних зависимостей и т.д. 2️⃣ Многоэтапная сборка
Разделение процесса сборки приложения на отдельные шаги, по завершению которых, на следующий шаг переносится только полученный результат, а не весь комплект сопутствующих программ и зависимостей.
3️⃣ Исключение лишних данных из сборочного процесса с помощью .dockerignore
4️⃣ Использование официальных образов
Официальные образы от разработчиков систем и разного рода инструментария с довольно высокой периодичностью обновляются, долгое время поддерживаются, а также проверены тысячами пользователей, что нельзя сказать о неофициальных сборках от энтузиастов, а вместе с ними и злоумышленников, которые плодят тысячи собственных творений дабы поделиться с окружающими.
⚒️ Пример двухэтапной сборки
python приложения с итоговой публикацией в slim# собираем зависимости
FROM python:3.10 AS builder
COPY requirements.txt .
RUN pip install --user -r requirements.txt
# помещаем исходники и собранные зависимости в итоговый образ
FROM python:3.10-slim
COPY --from=builder /root/.local /root/.local
COPY . /myapp
WORKDIR /myapp
ENV PATH=/root/.local/bin:$PATH
CMD ["python", "-u", "-m", "src"]
💥 В итоге получился образ размером 165 Мб, содержащий 135 установленных пакетов и 814 исполняемых файлов. Не такой уж и чистый, но по сравнению со стандартным образом, значительно меньше.
⚒️ Пример трехэтапной сборки
golang приложения с итоговой публикацией в scratch# кэширование модулей
FROM golang:1.22.4-alpine3.20 AS modules
COPY go.mod go.sum /modules/
WORKDIR /modules
RUN go mod download
# сборка приложения
FROM golang:1.22.4-alpine3.20 AS builder
COPY --from=modules /go/pkg /go/pkg
COPY . /app
WORKDIR /app
RUN go build -o /bin/myapp ./cmd/myapp
# публикация
FROM scratch
COPY --from=builder /app/config /config
COPY --from=builder /bin/myapp /myapp
CMD ["/myapp"]
💥 Размер полученного образа 29 Мб. Содержит 38 модулей проекта и 1 исполняемый файл.
💡 Безопасность систем контейнеризации - отдельная большая тема, однако, в разрезе приведенных примеров (скорее второго приведенного примера, т.к. в первом случае множество исполняемых файлов и библиотек - это, очевидно, кладезь уязвимостей), первый шаг в сторону ее обеспечения был сделан - минимизация вероятности попадания уязвимых зависимостей в контейнер.
#docker
Telegram
DeSoft.ru
📚 Пополняю коллекцию шпаргалок списком основных команд для работы с Docker.
🔷 Images
# список образов
docker images
# скачиваем образ из Docker Hub
docker pull <name>
# собираем образ из Dockerfile в текущей директории
docker build .
# с присвоением тега…
🔷 Images
# список образов
docker images
# скачиваем образ из Docker Hub
docker pull <name>
# собираем образ из Dockerfile в текущей директории
docker build .
# с присвоением тега…
🔥4👍1
Не откладываем в долгий ящик логичное продолжение рассмотренной ранее темы про агрегацию новостей. На этот раз собирать новости с разных источников будем не на отдельном сервере, а прямо в
⚡️ rss2tg_bot
Первый, наиболее быстрый вариант - воспользоваться ботом
▫️ Стартуем бота rss2tg_bot
▫️ Бот сразу же готов принимать фиды для обработки и публикации. Достаточно отправить ссылку на
Основные команды:
🔹
🔹
🔹
🚀 Для автоматического репоста новостей в публичный канал, нужно добавить бота в администраторы канала с разрешением на отправку сообщений.
▫️ Сформированный в личном чате с ботом список не мигрирует в канал автоматически. У канала с привязанным ботом свой список источников.
▫️
▫️
❗️ Важно отметить, что бот размещен на сервере частного разработчика, и до тех пор, пока имеется некое внешнее финансирование проекта, он его обслуживает и продолжает разработку. Эта ситуация несет определенные риски.
⚡️ RSS to Telegram Bot
Размещение новостного бота на собственном сервере на основе проекта с открытым исходным кодом RSS to Telegram Bot. Лучший вариант с точки зрения детальной настройки и независимости от внешних факторов.
🔖 Предварительно создаем нового бота в
🔖 Также необходимо определить
🚀 Запуск
Разворачивать бота на сервере будем с помощью
✳️ Скачиваем
✳️ Настраиваем переменные окружения в
▫️ Проставляем в
▫️ Отправку через
▫️
✳️ Поднимаем
🚀 Проверка
Возвращаемся в приватный чат с созданным в
🔹
🔹
🔹
🔹
🔹
🚀 Публикация в канал
▫️ Добавляем бота в администраторы канала с разрешением на отправку сообщений.
▫️ Создавать подписки на
а также управлять настройками подписок для канала
🔥 Таким образом, мы получаем собственный агрегатор с возможностью детальной настройки и полного контроля, а также неплохими опциями по оформлению, ограниченный лишь выделенными ресурсами оборудования.
#tools #opensource #selfhosted #rss
Telegram с возможностью автоматической публикации в свой открытый канал. На сайте будет размещена расширенная версия данной заметки с дополнительными примерами и описаниями.⚡️ rss2tg_bot
Первый, наиболее быстрый вариант - воспользоваться ботом
@rss2tg_bot.▫️ Стартуем бота rss2tg_bot
▫️ Бот сразу же готов принимать фиды для обработки и публикации. Достаточно отправить ссылку на
rss feed, и свежие новости начнут падать в ленту. Отправляем ссылку еще раз - источник перестанет обрабатываться.Основные команды:
🔹
/list - список подключенных источников.🔹
/stats - информация об интервале обновления, количестве фидов, чатов и пользователей. По мере роста нагрузки на бота, интервал обновления, естественно, будет увеличиваться. На момент публикации он составляет около 5 минут.🔹
/settings - небольшой набор параметров для настройки представления публикуемого поста.🚀 Для автоматического репоста новостей в публичный канал, нужно добавить бота в администраторы канала с разрешением на отправку сообщений.
▫️ Сформированный в личном чате с ботом список не мигрирует в канал автоматически. У канала с привязанным ботом свой список источников.
▫️
@rss2tg_bot https://desoft.ru/feed.xml - команда для добавления нового источника из чата канала.▫️
/settings@rss2tg_bot - настройки бота для канала.❗️ Важно отметить, что бот размещен на сервере частного разработчика, и до тех пор, пока имеется некое внешнее финансирование проекта, он его обслуживает и продолжает разработку. Эта ситуация несет определенные риски.
⚡️ RSS to Telegram Bot
Размещение новостного бота на собственном сервере на основе проекта с открытым исходным кодом RSS to Telegram Bot. Лучший вариант с точки зрения детальной настройки и независимости от внешних факторов.
🔖 Предварительно создаем нового бота в
@BotFather и получаем token.🔖 Также необходимо определить
user ID будущего администратора. Для этого идем в специального бота @userinfobot, выполняем команду /start, в ответ прилетает id.🚀 Запуск
Разворачивать бота на сервере будем с помощью
docker. Конфигурация машины: 2 CPU, 2 Гб RAM, 20 Гб SSD, ос Debian 12.✳️ Скачиваем
docker-compose.yml из репозитория проектаwget https://raw.githubusercontent.com/Rongronggg9/RSS-to-Telegram-Bot/dev/docker-compose.yml.sample -O docker-compose.yml
✳️ Настраиваем переменные окружения в
docker-compose.yml. Детальное описание каждого параметра здесь. Я же приведу только измененные значения.▫️ Проставляем в
TOKEN и MANAGER полученные ранее значения токена бота и id пользователя соответственно.▫️ Отправку через
Telegraph использовать не планировалось, поэтому комментируем переменную TELEGRAPH_TOKEN со всеми указанными там тестовыми значениями.▫️
MULTIUSER=0, т.к. многопользовательского доступа к боту не подразумевается.✳️ Поднимаем
docker compose up -d
🚀 Проверка
Возвращаемся в приватный чат с созданным в
@BotFather ботом. Если все было сделано верно, то у бота появится меню с целым списком команд.🔹
/help - перечень доступных команд и инструкция по использованию.🔹
/set_option - настройки бота.🔹
/set_default - параметры по умолчанию для новых подписок (формат представления, период проверки, стиль).🔹
/test rss-link - проверка возможности подключения rss-ленты с выводом последнего сообщения.🔹
/sub rss-link - подписка на rss-ленту.🚀 Публикация в канал
▫️ Добавляем бота в администраторы канала с разрешением на отправку сообщений.
▫️ Создавать подписки на
rss-ленты можно прямо из приватного чата с ботом/sub @my_public_channel rss-link
а также управлять настройками подписок для канала
/set_default @my_public_channel
🔥 Таким образом, мы получаем собственный агрегатор с возможностью детальной настройки и полного контроля, а также неплохими опциями по оформлению, ограниченный лишь выделенными ресурсами оборудования.
#tools #opensource #selfhosted #rss
Telegram
DeSoft.ru
Источников контента, новостных сайтов и каналов на сегодняшний день столько, что охватить весь объем становится проблематично, а отыскать что-то действительно ценное еще сложнее. Трудностей в освоении материала добавляет необходимость перепрыгивать с ленты…
🔥3👍1
Аналог
Plane - стильная система управления проектами с открытым исходным кодом, отличающаяся глубоким внимаем к деталям. Проект развивается семимильными шагами. В работе не только основная веб версия, но и приложения под мобильные устройства и десктоп.
🔖 Особенности
▪️ На верхнем уровне располагаются рабочие пространства как центральные узлы для групп, команд или целой компании, в рамках которых осуществляется вся совместная работа над проектами.
▪️ Внутри проекта пользователи оперируют проблемами и задачами, они же
▪️ Отдельный раздел посвящен циклам - организационные объединения задач с планированием по времени (например, спринты), сопровождающиеся всей необходимой аналитической информацией.
▪️ Проекты также содержат модули - каталоги для логического объединения связанного контента в проекте для облегчения навигации, отслеживания и планирования.
▪️ Страницы - место хранения заметок и документации. Заявлена интеграция с искусственным интеллектом для помощи в составлении документов.
💥 Отмечу большое число аналитических разделов и экранов с различными метриками, фильтрами, категоризацией и вариантами представления. Такая проработка внутреннего инструментария пользователя позволяет настроить максимально комфортно под себя и под конкретный проект все необходимые компоненты, разделы и страницы.
💥 Еще год назад у проекта был всего один “тариф” - бесплатный как в облаке так для собственного размещения. Теперь это целый набор предложений, оно и понятно - курс на перехват аудитории
⚒️ Разработка ведется на
Заявленные интеграции с
🔖 Установка self-hosted версии
Разработчики позаботились об автоматизации процесса развертывания и управления и подготовили
Здесь нас встречает набор предопределенных действий.
Выполнив пункт
Перед запуском рекомендуется заглянуть в переменные окружения и прописать ip адрес своего хоста в
Запускаем
После запуска всех контейнеров, становятся доступными панель администратора
#management #opensource #selfhosted
Trello есть в копилке, альтернатива Notion и Miro также была рассмотрена, на очереди opensource замена Jira.Plane - стильная система управления проектами с открытым исходным кодом, отличающаяся глубоким внимаем к деталям. Проект развивается семимильными шагами. В работе не только основная веб версия, но и приложения под мобильные устройства и десктоп.
🔖 Особенности
▪️ На верхнем уровне располагаются рабочие пространства как центральные узлы для групп, команд или целой компании, в рамках которых осуществляется вся совместная работа над проектами.
▪️ Внутри проекта пользователи оперируют проблемами и задачами, они же
issues, обладающие уникальным идентификаторами, а также целым рядом настраиваемых параметров, что добавляет гибкости и удобства в работе и контроле исполнения.▪️ Отдельный раздел посвящен циклам - организационные объединения задач с планированием по времени (например, спринты), сопровождающиеся всей необходимой аналитической информацией.
▪️ Проекты также содержат модули - каталоги для логического объединения связанного контента в проекте для облегчения навигации, отслеживания и планирования.
▪️ Страницы - место хранения заметок и документации. Заявлена интеграция с искусственным интеллектом для помощи в составлении документов.
💥 Отмечу большое число аналитических разделов и экранов с различными метриками, фильтрами, категоризацией и вариантами представления. Такая проработка внутреннего инструментария пользователя позволяет настроить максимально комфортно под себя и под конкретный проект все необходимые компоненты, разделы и страницы.
💥 Еще год назад у проекта был всего один “тариф” - бесплатный как в облаке так для собственного размещения. Теперь это целый набор предложений, оно и понятно - курс на перехват аудитории
Jira предполагает гибкий подход к разной аудитории, но тем самым под нож попадает открытая функциональность.⚒️ Разработка ведется на
nextjs для frontend и django для backend. Инфраструктура сервиса базируется на современных решениях postgresql, redis, rabbitmq, minio.Заявленные интеграции с
github и gitlab на момент публикации еще не добрались до релиза, однако в dev ветках работа ведется, а вот использование webhooks уже доступно. Для внешнего взаимодействия имеется хорошо задокументированный API.🔖 Установка self-hosted версии
Разработчики позаботились об автоматизации процесса развертывания и управления и подготовили
sh скрипт с интерактивным меню.# скачиваем файл скрипт
curl -fsSL -o setup.sh https://raw.githubusercontent.com/makeplane/plane/master/deploy/selfhost/install.sh
# делаем его исполняемым
chmod +x setup.sh
# запускаем
./setup.sh
Здесь нас встречает набор предопределенных действий.
Select a Action you want to perform:
1) Install
2) Start
3) Stop
4) Restart
5) Upgrade
6) View Logs
7) Backup Data
8) Exit
Выполнив пункт
1) Install будет подготовлен рабочий каталог plane-app с docker-compose.yml и переменными окружения plane.env. Перед запуском рекомендуется заглянуть в переменные окружения и прописать ip адрес своего хоста в
APP_DOMAIN, а также указать порт NGINX_PORT, этого будет достаточно для локального запуска. Остальные параметры на усмотрение администратора.Запускаем
./setup.sh
# выбираем пункт 2) Start
2
После запуска всех контейнеров, становятся доступными панель администратора
http(s)://<ip/domain>/god-mode и основное приложение http(s)://<ip/domain>:PORT.#management #opensource #selfhosted
1👍2🔥2