• Как проверить доступность списка IP:Port из txt файла?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    С помощью psping: https://learn.microsoft.com/en-us/sysinternals/dow... By Mark Russinovich.
    import subprocess
    
    
    # Функция для проверки доступности IP:port с помощью psping
    def check_ip(ip_port):
        try:
            print(f"Проверяем доступность {ip_port}", end='')
            # Выполняем команду psping
            result = subprocess.run(['psping', ip_port], capture_output=True, text=True)
            # Проверяем, есть ли в выводе сообщение об успешном пинге
            if "(0% loss)" in result.stdout:
                print(f"\rПроверяем доступность {ip_port} - доступен")
                return True
            if "(25% loss)" in result.stderr or "50% loss" in result.stdout:
                print(f"\rПроверяем доступность {ip_port} - потери пакетов")
                return True
            if "(100% loss)" in result.stdout:
                print(f"\rПроверяем доступность {ip_port} - недоступен")
                return False
        except Exception as e:
            print(f"Ошибка при проверке {ip_port}: {e}")
        return False
    
    
    # Чтение IP:port из файла и запись доступных в другой файл
    def check_ips_from_file(input_file, output_file):
        with open(input_file, 'r') as infile, open(output_file, 'w') as outfile:
            for line in infile:
                ip_port = line.strip()  # Убираем лишние пробелы и символы новой строки
                if check_ip(ip_port):
                    outfile.write(ip_port + '\n')  # Записываем доступный IP:port в файл
    
    
    # Указываем имена файлов
    input_file = 'ip.txt'
    output_file = 'ipUP.txt'
    
    # Запускаем проверку
    check_ips_from_file(input_file, output_file)
    Ответ написан
  • Как найти паттерн на картинке с OpenCV?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    673e7b80e4dfd963850969.png
    Код:
    spoiler
    import cv2
    import numpy as np
    
    def find_and_draw_template(template_path, original_image_path):
        # Загрузка шаблона
        template = cv2.imread(template_path)
        template_gray = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY)
    
        # Создание объекта ORB
        orb = cv2.ORB_create()
        bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
    
        # Обнаружение ключевых точек и вычисление дескрипторов для шаблона
        keypoints_template, descriptors_template = orb.detectAndCompute(template_gray, None)
    
        # Обработка изображения
        image = original_image_path.copy()
        image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    
        # Обнаружение ключевых точек и вычисление дескрипторов для изображения
        keypoints_image, descriptors_image = orb.detectAndCompute(image_gray, None)
    
        # Сопоставление дескрипторов
        matches = bf.match(descriptors_template, descriptors_image)
        matches = sorted(matches, key=lambda x: x.distance)
    
        # Отладочная информация
        print(f"Общее количество найденных соответствий: {len(matches)}")
    
        # Отбор лучших соответствий
        good_matches = matches[:75]
        print(f"Количество хороших соответствий: {len(good_matches)}")
    
        # Проверка на наличие хороших соответствий
        if len(good_matches) >= 4:
            # Получение координат ключевых точек
            src_pts = np.float32([keypoints_template[m.queryIdx].pt for m in good_matches]).reshape(-1, 1, 2)
            dst_pts = np.float32([keypoints_image[m.trainIdx].pt for m in good_matches]).reshape(-1, 1, 2)
    
            # Нахождение матрицы гомографии
            M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
            print("Гомография найдена.")
    
            # Получение углов шаблона
            h, w = template_gray.shape[:2]
            pts = np.float32([[0, 0], [0, h - 1], [w - 1, h - 1], [w - 1, 0]]).reshape(-1, 1, 2)
    
            # Преобразование углов шаблона
            dst = cv2.perspectiveTransform(pts, M)
    
            # Обводим рамкой найденные области
            image = cv2.polylines(image, [np.int32(dst)], isClosed=True, color=(0, 255, 0), thickness=3)
        else:
            print("Недостаточно хороших соответствий для нахождения гомографии.")
    
        return image
    
    # Пример использования функции
    template_file = 'LED.jpg'              # Шаблон
    original_image_file = 'outputImage.jpg'  # Исходное изображение
    
    # Загрузка и обработка изображения
    original_image = cv2.imread(original_image_file)
    result_image = find_and_draw_template(template_file, original_image)
    
    # Масштабируем изображение для отображения - не обязательно, у меня не вмещалось в просмотр
    scale_percent = 50  # Процент уменьшения размера
    width = int(result_image.shape[1] * scale_percent / 100)
    height = int(result_image.shape[0] * scale_percent / 100)
    resized_image = cv2.resize(result_image, (width, height), interpolation=cv2.INTER_AREA)
    
    # Отображение результата
    cv2.imshow('Detected Templates', resized_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    Ответ написан
    Комментировать
  • Как получить цвет приложения на котором находится моё приложение?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Код:
    spoiler
    import sys
    from PyQt5 import QtWidgets, QtCore, QtGui
    
    
    class ClockWidget(QtWidgets.QWidget):
        def __init__(self):
            super().__init__()
    
            # Устанавливаем параметры окна
            self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.FramelessWindowHint)
            self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
    
            # Устанавливаем таймер для обновления времени
            self.timer = QtCore.QTimer(self)
            self.timer.timeout.connect(self.update_time)
            self.timer.start(1000)  # Обновляем каждую секунду
    
            # Создаем метку для отображения времени
            self.label = QtWidgets.QLabel(self)
            self.label.setAlignment(QtCore.Qt.AlignCenter)
            self.label.setStyleSheet("font-size: 48px;")  # Размер шрифта
    
            # Устанавливаем начальное время
            self.update_time()
    
            # Устанавливаем размер окна
            self.resize(200, 60)
    
            # Переменные для перемещения окна
            self.dragging = False
            self.drag_position = None
    
        def update_time(self):
            current_time = QtCore.QTime.currentTime()
            self.label.setText(current_time.toString("HH:mm:ss"))
            self.check_color_below_widget()
    
        def check_color_below_widget(self):
            # Получаем глобальные координаты нижней границы виджета
            global_pos = self.mapToGlobal(self.rect().bottomLeft())
    
            # Определяем координаты точки на 10 пикселей ниже
            point_below = global_pos + QtCore.QPoint(0, 10)
    
            # Получаем цвет пикселя в этой точке
            screen = QtWidgets.QApplication.primaryScreen()
            pixel_color = screen.grabWindow(0).toImage().pixel(point_below.x(), point_below.y())
            color = QtGui.QColor(pixel_color)
    
            # Выводим значения RGB для отладки
            print(f"Color below widget: R={color.red()}, G={color.green()}, B={color.blue()}")
    
            # Вычисляем яркость цвета
            brightness = (color.red() * 299 + color.green() * 587 + color.blue() * 114) / 1000
    
            # Устанавливаем цвет текста в зависимости от яркости
            if brightness < 128:  # Темный фон
                self.label.setStyleSheet("color: white; font-size: 48px;")
            else:  # Светлый фон
                self.label.setStyleSheet("color: black; font-size: 48px;")
    
        def paintEvent(self, event):
            # Рисуем прозрачный фон
            painter = QtGui.QPainter(self)
            painter.setRenderHint(QtGui.QPainter.Antialiasing)
            painter.setBrush(QtGui.QColor(0, 0, 0, 0))
    
        def mousePressEvent(self, event):
            if event.button() == QtCore.Qt.LeftButton:
                self.dragging = True
                self.drag_position = event.globalPos() - self.frameGeometry().topLeft()
    
        def mouseMoveEvent(self, event):
            if self.dragging:
                self.move(event.globalPos() - self.drag_position)
    
        def mouseReleaseEvent(self, event):
            if event.button() == QtCore.Qt.LeftButton:
                self.dragging = False
    
    
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        clock = ClockWidget()
        clock.show()
        sys.exit(app.exec_())


    673d462f556b5211575721.png
    Ответ написан
    2 комментария
  • Как использовать кириллицу в footer wkhtmltopdf?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    import pdfkit
    import requests
    
    options = {
        "orientation": "portrait",
        "page-size": "A4",
        "margin-top": "1.0cm",
        "margin-right": "1cm",
        "margin-bottom": "1.5cm",
        "margin-left": "1cm",
        "encoding": "utf-8",
    
        'footer-center': "Страница [page] из [toPage]",
        'footer-font-size': 10,
    
    }
    
    url = 'https://pingvinus.ru/note/find-big-files'
    r = requests.get(url)
    pdfkit.from_string(r.text, f'{url.split("/")[-1]}.pdf', options=options, verbose=True)


    Код отрабатывает корректно:

    673bf6d7765f7197952492.png

    Мне кажется, имеет смысл смотреть что у вас в out.
    Ответ написан
  • Aiogram3 мультибот, как запустить ботов из списка токенов?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    В функции command_add_bot создается новый экземпляр бота с использованием токена.
    Каждый раз, когда новый бот добавляется, его вебхук регистрируется в системе, что позволяет главному боту получать обновления от всех добавленных ботов.

    Состояния ботов хранится в MemoryStorage, как вариант, вам предлагают использовать RedisStorage.

    З.Ы. Если вы не хотите добавлять из интерфейса, то итерируйтесь по списку токенов и применяйте кишки из command_add_bot.
    Ответ написан
    Комментировать
  • Установил библиотеку, но код не видит его, что делать?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    1. Создайте папку под проект, как пример: C:\btc
    2. Положите туда btc.py
    3. Создайте в папке виртуальное окружение: python -m venv venv
    4. Активируйте его: venv\Scripts\activate
    5. Установите зависимости: pip install bip32utils
    6. Запускайте своим батником:
    @echo off
    C:\btc\venv\Scripts\python.exe C:\btc\btc.py
    pause
    Ответ написан
  • Где на самом деле лежит и как называется файл hosts в windows?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Битность программ не совпадает с виндой. 32-битный Notepad++ не видит папку etc, 64-битный - видит.

    Ваша фраза: "новые (относительно) ищет", видимо, говорит о том же.

    В 64-битной версии Windows папка C:\Windows\System32 содержит 64-битные файлы и библиотеки. Однако, если вы запускаете 32-битное приложение, такое как 32-битная версия Notepad++, Windows перенаправляет запросы к этой папке в C:\Windows\SysWOW64, где находятся 32-битные версии библиотек.
    Это означает, что 32-битное приложение не сможет увидеть или получить доступ к файлам в C:\Windows\System32, включая папку etc, если оно пытается открыть ее через стандартный интерфейс.
    Ответ написан
    3 комментария
  • Что не так с sql запросом?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Использование f-строк для вставки данных в SQL запросы может привести к уязвимостям, связанным с SQL-инъекциями. Вместо использования f-строк, рекомендуется применять параметризованные запросы или подготовленные выражения, что позволяет безопасно передавать данные в запросы.
    Ответ написан
    Комментировать
  • VitHybrid не может добавить позиционные эмбеддинги. Что делать?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    from transformers import ViTHybridConfig, ViTHybridModel
    
    configuration = ViTHybridConfig(patch_size=12)
    model = ViTHybridModel(configuration)
    
    configuration = model.config

    print(configuration.patch_size)
    >>>12
    Ответ написан
    Комментировать
  • Как сформировать поиск фразы/слова между определенных слов Python, регулярные выражения?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    /Наименование\s*(.*?)\s*(Maskota|Картина)
    Брать первую группу.
    Ответ написан
    Комментировать
  • Как сделать фон полупрозрачным и размытым в меню трея?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    import sys
    from PySide6.QtWidgets import QApplication, QSystemTrayIcon, QMenu
    from PySide6.QtGui import QIcon, QAction
    from PySide6.QtCore import Qt
    
    
    def create_tray_icon():
        app = QApplication(sys.argv)
    
        tray_icon = QSystemTrayIcon(QIcon("free-icon-mushroom-17845555.png"), app)
    
        # Создаем меню
        tray_menu = QMenu()
        tray_menu.setWindowFlags(tray_menu.windowFlags() | Qt.FramelessWindowHint | Qt.NoDropShadowWindowHint)
        tray_menu.setAttribute(Qt.WA_TranslucentBackground)
    
        # Настройка стиля меню
        tray_menu.setStyleSheet("""
            QMenu {
                background-color: rgba(255, 255, 255, 150);
                border: 1px solid rgba(0, 0, 0, 50);
            }
            QMenu::item {
                padding: 5px 30px;
                margin: 2px;
                border-radius: 5px;
            }
            QMenu::item:selected {
                background-color: rgba(100, 100, 100, 100);  /* Менее яркое выделение */
                color: black;  /* Цвет текста при выделении */
            }
        """)
    
        # Создаем действия
        action_show_message = QAction("Показать сообщение")
        action_quit = QAction("Выход")
    
        tray_menu.addAction(action_show_message)
        tray_menu.addSeparator()
        tray_menu.addAction(action_quit)
    
        action_show_message.triggered.connect(lambda: tray_icon.showMessage("Заголовок", "Это сообщение из трея"))
        action_quit.triggered.connect(app.quit)
    
        tray_icon.setContextMenu(tray_menu)
        tray_icon.show()
    
        sys.exit(app.exec())
    
    
    if __name__ == "__main__":
        create_tray_icon()


    672dc9e2a21c3749067411.png
    Ответ написан
  • PyQt6. Как сохранить изображение QPixmap в файл?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    import sys
    
    from PyQt6.QtGui import QPixmap
    from PyQt6.QtWidgets import QApplication
    
    app = QApplication(sys.argv)
    
    pixmap = QPixmap(r"path/to/your/image.jpg")
    pixmap.save(r"path/to/your/image.jpg", "JPG")
    Ответ написан
    Комментировать
  • Как решить проблему Expected Expression?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    "LIMIT 5 " & _ - ожидает что строка будет продолжена.

    SQLStr = "SELECT cellName as NSector, SUBSTRING(CAST(cellName as CHAR),1,6) as SiteName " & _
                "FROM LNCEL_begin " & _
                "LIMIT 5"

    Разбиения одной инструкции на несколько строк: https://learn.microsoft.com/ru-ru/dotnet/visual-ba...
    Ответ написан
  • Что за способ представления float через 4 byte и int?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    import struct
    
    float_value = 3.50999999
    
    # Преобразуем float в байты
    byte_value = struct.pack('f', float_value)
    
    # Преобразуем байты в целое число
    int_value = int.from_bytes(byte_value, byteorder='little')
    print(int_value)
    Ответ написан
    1 комментарий
  • Как сделать значок своего сервера в дискорд, который сможет отображаться около других участников?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Если я правильно понял о чём речь, то это устанавливается в настройках роли.
    Нужен буст.
    6727e02fc1c18080760221.png
    Ответ написан
  • Как обнаружить и остановиться на первом переносе строки?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    // Извлекаем текст из <p> с учетом переноса строки
    $content = preg_replace_callback(
        '#<p>(.*?)(?:<br>|</p>)#s',
        function ($matches) {
            return $matches[1]; // Возвращаем текст до первого <br> или </p>
        },
        $content
    );
    Ответ написан
    Комментировать
  • Как создать дропдаун с мультивыбором в google spreadsheets через скрипт?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    А средствами самого Google Sheets не устроит?
    Данные -> Настроить проверку данных -> Добавить правило -> Создать элементы -> Поставить галку "разрешить выбор нескольких объектов".
    67256eccb10ce472968577.png
    Ответ написан
  • Не получается спарсить ссылку с Binance?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Ссылки генерируются динамически: в вашем r.text нет искомых ссылок. Без использования браузера под капотом не получится.

    from playwright.sync_api import sync_playwright
    
    with sync_playwright() as p:
        browser = p.chromium.launch()
        page = browser.new_page()
        page.goto('https://www.binance.com/ru/support/announcement/новые-листинги-криптовалюты?c=48&navId=48&hl=ru')
    
        # Ждем, пока контент загрузится
        page.wait_for_timeout(2000)
    
        # Извлекаем ссылки
        links = page.query_selector_all('a[class="css-1w8j6ia"]')
        for link in links:
            href = link.get_attribute('href')
            if href:
                full_url = f"https://www.binance.com{href}"
                print(full_url)
    
        browser.close()
    Ответ написан
    1 комментарий
  • Как в Гугл таблицах создать кнопку в ячейке, чтобы при нажатии вносилась сегодняшняя дата (или время)?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    0. Через создание своего меню. Будет по нажатию одной кнопки.
    function insertStaticTime() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
      var currentTime = new Date();
      var formattedTime = Utilities.formatDate(currentTime, Session.getScriptTimeZone(), "dd.MM.YYYY HH:mm");
      
      // Вставляем текущее время в ячейку A1 (можете изменить на нужную ячейку)
      sheet.getRange("A1").setValue(formattedTime);
    }
    
    function onOpen() {
      var ui = SpreadsheetApp.getUi();
      ui.createMenu('Custom Menu')
          .addItem('Insert Current Time', 'insertStaticTime')
          .addToUi();
    }

    1. Если хочется кнопок (не знаю насколько это удобно, есть некоторые сомнения).
    Buttons in Google Sheets: https://spreadsheet.dev/buttons-in-google-sheets
    В качестве скрипта что-нибудь такое:
    function insertCurrentDateTime() {
      var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // Получаем активный лист
      var currentDateTime = new Date(); // Получаем текущую дату и время
      sheet.getRange('A1').setValue(currentDateTime); // Вставляем дату и время в ячейку A1
    }

    67249d315fb41363471663.png
    Ответ написан
    2 комментария