• Как исправить геометрические искажения фотографий документов?

    SayMAN83
    @SayMAN83
    Работаю в IT
    Опыт подсказывает, что таблицы проще перепечатать с нуля. Чем заниматься онанизмом с распознаванием, а затем редактированием.
    Ответ написан
    4 комментария
  • Активная блокировка VPN провайдером, решения нет?

    Vindicar
    @Vindicar
    RTFM!
    chisel позволяет поднять туннель поверх HTTPS.
    HTTPS вроде не режут по скорости как обычный SSH, но в то же время узнаваемых сигнатур VPN-протоколов нет.
    Минус - нужна своя VPS за бугром и желательно с доменом. Сертификат для использования с chisel можно взять у letsencrypt.
    В общем, решение не для "уверенного пользователя".
    Ответ написан
    3 комментария
  • Где применяют python помимо веба и data science?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Почти везде, это язык общего назначения. Понятно, что на нём не пишут операционные системы, драйвера и прошивки, так как он интерпретируемый.
    Ответ написан
    3 комментария
  • Как определить что нагружает CPU в определённое время?

    paran0id
    @paran0id
    Умный, но ленивый
    Можно поставить atop и настроить сохранение снапшотов информации о процессах.
    Ответ написан
    1 комментарий
  • Как установить последнюю версию nodejs с помощью apt?

    С помощью nodesource: https://github.com/nodesource/distributions#deb
    Ответ написан
    Комментировать
  • Как сжать видео так, чтобы надписи были в идеальном качестве, а остальная картинка в нормальном?

    @alex1478
    Есть пример энкодера, который позволяет кодировать в h264 с разным уровнем квантования для всего видео и определенной области https://github.com/ChaoticEnigma/h264-roi. Если к этому добавить поиск области с номер через openalpr для каждого кадра, то получится то что вам нужно.
    Ответ написан
    4 комментария
  • Как изучать администрирование линукс самостоятельно?

    ma4akk
    @ma4akk
    Для начала стоит поставить себе Linux.
    Почитать книгу, например.

    Самое главное - практиковаться
    Ответ написан
    2 комментария
  • Как изучать администрирование линукс самостоятельно?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Я научился, когда снес Windows на своем рабочем компьютере, и установил Linux.
    Ответ написан
    2 комментария
  • Как изучать администрирование линукс самостоятельно?

    Morpheus_God
    @Morpheus_God
    Я ставлю себе виртуалку, придумываю или нахожу нужную мне задачу и по статьям в интернете делаю.
    Что то в голове откладывается, что то приходится иногда подсматривать.
    Ответ написан
    Комментировать
  • Могут ли силовики читать сообщения с мессенджеров с использованием СОРМ?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Если пользователь задаёт такой вопрос, то он, скорее всего, не включил двухфакторную авторизацию и не использует секретные чаты, а Телеграм у него зареган на свой собственный российский номер на своё собственное имя. Силовики просто сделают сброс пароля, получат у оператора содержимое смс и залогинятся тобой, затем автоматизированно скачают всю твою переписку для анализа. На всё про всё потребуются считанные минуты, и если это сделать посреди ночи, ты даже ничего не успеешь заметить. И никакое шифрование не спасёт.

    Ну а если тебя поймают с телефоном в руках, то можно будет просто открыть твой Телеграм и прям на нём проверить твои переписки.
    Ответ написан
    2 комментария
  • Почему PHP используется в не HighLoad приложениях?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    есть поптыки и в хайлоад
    успешные
    тратят на железо, и х с ним... перепсывать - муторно, новый коллектив, хз какой %% успеха и ваще
    конечно, не все php, на беке в том числе джжава и чуток го да и питона, но морда - php 100% неравифнрованный

    тебе нужно понимать следующее - говорю за Питон, в пихе ситуация +- такая же, но думаю ХУЖЕ

    одна питон переменная , в силу отсутствия типизации, занимает 56 байт (могу врать, 52 там, 62... короче такой порядок), одна го - 2 байта (тоже понятно +- 2-4-8), и это мы еще указателей не касались

    все

    возьми 56 грамм и 2 грамма, умножь ан 10 и на 100, и потаскай, узнаешь как процессор и память ими грузятся, и почему может и не может хайлоад
    Ответ написан
    1 комментарий
  • Как управлять яндекс-лампочкой в обход апи яндекса?

    @justslipknot Автор вопроса
    Как выяснилось, яндекс лампочки - это ребрендированная Tuya лампочка. У Tuya есть локальный протокол и модуль для Home Assistant. Но я решил вопрос немного иначе:
    1. Устанавливаем приложение Smart Life или Tuya Home (оба совместимы с яндекс лампами)
    2. Сбрасываем настройки лампочек и добавляем их в приложении Smart Life / Tuya Home
    3. Регистрируем приложение на платформе Tuya. Инструкция есть в этом репозитории.
      Пояснение
      Этот шаг нам нужно проделать, чтобы получить Local Key, который требуется для шифрования и расшифровки запросов (Local Key, как я понял, обновляется после сброса настроек). Инструкция, как быстро добавить устройства в приложение платформы Tuya так же представлено в репозитории

    4. Выбираем библиотеку для работы с Tuya local api. Я выбрал вот эту библиотеку для C#. На GitHub странице этой библиотеки есть инструкция по работе с Tuya local api.
    5. Реализуем нужный нам функционал


    Небольшой топорный пример из моего тестового проекта:
    Поиск устройств Tuya в сети

    // Эти данные можно получить на странице вашего приложения на платформе Tuya.
    var accessId = "<access id>";
    var apiSecret = "<api secret>";
    
    // Сканируем сеть на наличие доступных устройств Tuya. 
    // Хранение найденных устройств реализуется как душе угодно
    
    var scanner = new TuyaScanner();
    scanner.OnNewDeviceInfoReceived += (sender, info) =>
    {
       // логика сохранения найденных устройств 
    };


    Получение Local Key


    Самый важный этап.
    Пример взят из репозитория библиотеки
    var api = new TuyaApi(region: TuyaApi.Region.CentralEurope, accessId: ACCESS_ID, apiSecret: API_SECRET);
    var devices = await api.GetAllDevicesInfoAsync(anyDeviceId: DEVICE_ID);
    foreach(var device in devices)
    {
        Console.WriteLine($"Device: {device.Name}, device ID: {device.Id}, local key: {device.LocalKey}");
    }


    Отправка команд устройству

    var device = new TuyaDevice("<IP адрес>", "<local key>", "<device id>");
    
    // Пример команды включения лампочки
    // Метод FillJson автоматически подставляет нужные параметры, поэтому сразу пишем запрос.
    // Про методы DPS можно почитать в официальной документации Tuya
    var onCommand = device.FillJson("{\"dps\":{\"20\":true}}");
    
    var request = device.EncodeRequest(TuyaCommand.CONTROL, onCommand );
    
    // Посылаем сигнал. Если устройство не ответит, то падает исключение 
    var encodedResponse = await device.SendAsync(request);
    var response = device.DecodeResponse(encodedResponse);



    Далее остаётся разобраться с кодами команд и можете контролировать лампы как вам угодно.
    Ответ написан
    3 комментария
  • Как распространять приложение под linux?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Я не знаю, почему все так активно советуют собирать пакеты. Надо начать с того, что в Linux никогда не было принято использовать pyinstaller... почему? Потому что в Linux python идёт из коробки. В Windows сложно вынуждать пользователей устанавливать интерпретатор языка и все зависимости, тут же с этим проще гораздо.

    Так что можно просто распространять архив с приложением и инструкцией по запуску вида:

    virtualenv -p python3 env
    . env/bin/activate
    pip install -r requirements.txt
    ./app.py
    Ответ написан
    2 комментария
  • Как подписать дату и время на оси абсцисс в Matplotlib?

    @dmshar
    Ну, например, вот так:
    import pandas as pd
    import matplotlib.pyplot as plt
    from matplotlib.ticker import MultipleLocator
    ds=[
      ['14.06.2022 00:00', 1],
      ['14.06.2022 06:00', 2],
      ['14.06.2022 12:00', 3],
      ['14.06.2022 18:00', 4],
      ['15.06.2022 00:00', 1],
      ['15.06.2022 06:00', 2],
      ['15.06.2022 12:00', 3],
      ['15.06.2022 18:00', 4],
      ['16.06.2022 00:00', 1],
      ['16.06.2022 06:00', 2],
      ['16.06.2022 12:00', 3],
      ['16.06.2022 18:00', 4]
    ]
    
    df=pd.DataFrame(ds,columns=['D','A'])
    df['D']=pd.to_datetime(df['D'])
    df.set_index('D',inplace=True)
    ax=df.plot()
    ax.xaxis.set_minor_locator(MultipleLocator(6))


    62a8787e919cc437718429.png
    Ответ написан
    Комментировать
  • Импорт из XML в HTML локально?

    @rPman
    одно слово - xslt (первый же результат запроса в гугл)
    нативно поддерживается всеми браузерами (это очень старая технология), позволяет строить красивые страницы на основе данных xml, формально не требует javascript (это отдельная технология, так как она формирует html дальше можно использовать javascript но не обязательно)

    работает локально, даже из файла file://
    Ответ написан
    1 комментарий
  • Актуальны ли технологии AJAX и JQUERY при нынешних веб реалиях?

    @unreal_serg
    Jquery вполне актуален для дешевых проектов до 100к рублей примерно. Middle разработчик на React, Vue, Angular стоит тысяч 150 в месяц, в то время как специалист, знающий Jquery стоит чуть ли не в два раза дешевле, отсюда и актуальность Jquery.
    Jquery гораздо проще всех вышеперечисленных библиотек/фреймворков. Накидать на нем слайдер, счетчик и прочие мелкие модули для мелких сайтов - 5 минут, не говоря уже о бесчисленном множестве готовых решений. В то время как, намутить "клик вне элемента" на Vue3 CLI для компонента в списке будет тот еще гемор. В то время как на Jquery навесил слушатель по классу, сделал проверку и не паришься!
    Поэтому вывод: для более менее продвинутых приложений типа SPA, CRM, админка и пр. - актуальнее всего использовать прогрессивные фремворки. Для дешевых сайтов - смело бери Jquery, вероятность ошибиться будет минимальная. Особенно если ты бэкендер и знания фронта посредственные. И жадный заказчик тебе спасибо скажет (наверное).
    А все эти "Jquery не нужен" - детские понты среди программистов аля "я пишу на Vue, jquery - кал", "Я пишу на Java, PHP - кал", "Я пишу на C, Java - кал" и т.д.
    Ajax - это термин, означающий отправку асинхронных запросов. На сегодняшний день актуально использовать fetch в нативном JS/
    Ответ написан
    2 комментария
  • Как генерировать красивый PDF с помощью PHP?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Самый правильный путь генерация не на основе html а с нуля
    Посмотрите сюда https://habr.com/ru/post/31438/

    upd https://stackoverflow.com/questions/7364/edit-pdf-...

    Для вас есть 2 пути :
    Создать шаблон pdf загрузить его и четко по месту разместить текст
    Второй вариант это с 0 сформировать весь репорт.

    В любом случае рабочий процесс следующий: дизайнер отрисовывает макет, а вы вычисляете размеры плейсхолдеров и заполняете их в коде.
    Ответ написан
    8 комментариев
  • Как упаковать в exe скрипт?

    @MaxKozlov
    Скрипт на Powershell пойдёт ?
    # PSv7   $cert = [Convert]::ToBase64String((Get-Content D:\Path\To\Certificate.pfx/cer -AsByteStream), 'InsertLineBreaks')
    # PSv5.1 $cert = [Convert]::ToBase64String((Get-Content D:\Path\To\Certificate.pfx/cer -Encoding Byte), 'InsertLineBreaks')
    $Cert = @"
    MIILYgIBAzCCCx4GCSqGSIb3DQEH
    .....
    .....
    .....
    1y1lZqkQICB9A=
    "@
    
    #LocalMachine
    $location = [System.Security.Cryptography.X509Certificates.StoreLocation]::CurrentUser
    
    #ls Cert:\CurrentUser\
    #ls Cert:\LocalMachine\
    $storeName = 'TrustedPublisher'
    
    $store = [System.Security.Cryptography.X509Certificates.X509Store]::new($storeName, $location)
    $store.Open('ReadWrite')
    [byte[]]$content = [Convert]::FromBase64String($cert)
    $certificate = [System.Security.Cryptography.X509Certificates.X509Certificate2]::new($content)
    $store.Add($certificate)
    $store.Close()

    В комментариях сверху показано, как получить содержимое сертификата, которое надо подставить в $cert
    В комментариях к $location показано что ещё бывает
    В комментариях к $storeName Показано откуда его брать

    Поддерживается как импорт просто сертификата, так и pfx с ключом
    Пароль для pfx не проверял, но по идее будет работать если он будет указан как new($content, $password)
    Ответ написан
    Комментировать
  • Где были написана эта программа?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Открой ехе через любой редактор ресурсов. Там могут быть сведения о сборщике и компиляторе
    Ответ написан
    Комментировать
  • Анимация из картинок в tkinter и асинхромная работа с discord, возможно ли это и как это сделать?

    Vindicar
    @Vindicar
    RTFM!
    Главная проблема: у любого GUI-приложения есть бесконечный цикл обработки оконных сообщений. У любого асинхронного приложения есть бесконечный цикл-реактор, который обрабатывает реакции на завершение асинхронных операций (в т.ч. ввода-вывода). Это два разных цикла, они друг о друге не знают, и в одном потоке может работать только один из них.

    Отсюда два решения.
    1. Плюнуть на Tkinter и использовать PyQT. Есть сторонняя библиотека pyqt-async, которая вроде как позволяет засунуть обработку оконных сообщений в цикл-реактор.
    2. Запустить в главном потоке цикл-реактор, а GUI (на базе любого фреймворка) создать и запустить во вспомогательном. Любые задачи для выполнения в главном потоке делать через asyncio.run_coroutine_threadsafe(). Любые модификации GUI делать, создавая статичный объект-описание операции над GUI и поместив его в очередь (Queue, например). Поток GUI должен периодически читать эту очередь, и вносить найденные там изменения. В ткинтере может помочь метод after(), наверно есть аналоги и в других фреймворках.
    Ответ написан
    Комментировать