Задать вопрос
  • Как автоматически загрузить документы на сайт, используя selenium или что-то похожее?

    selenium везде кидает свои исключения и я не не знаю как их правильно обрабатывать, когда мне просто например нужно нажать на кнопку, если не получилось, то пробовать пока не получится.

    1. Я бы сейчас вместо селениума лучше бы взял playwright - у него API гораздо удобнее в плане всяких ожиданий
    2. thread.sleep использовать для этого - это неправильное решение. Нужно ожидать появления/исчезновения элементов по селектору
    3. Если хочешь, чтобы тебе помогли с исключениями - лучше бы их текст сюда скинуть тогда.
    Ответ написан
    3 комментария
  • Как реализовать TcpLister, который будет ожидать запроса?

    petermzg
    @petermzg
    Самый лучший программист
    А зачем вообще использовать TcpLister
    Используйте класс Socket
    void Init()
    {
       listener = new Socket(loopback.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
       listener.Bind(localEndPoint);
       listener.Listen(10);
       listener.BeginAccept(OnBeginAsyncCallback, this);
    }
    private void OnBeginAsyncCallback(IAsyncResult asyncResult)
    {
       var clientSocket = listener.EndAccept(asyncResult);
       listener.BeginAccept(OnBeginAsyncCallback, this);
       // ...
    }

    Будет реально асинхронно и еще на портах ввода-вывода
    Ответ написан
    4 комментария
  • Какая минимальная конфигурация ноутбука для программирования?

    @Drno
    современный i3, минимум 8гб оперативки(лучше 16гб)
    есть куча недорогих леново под такое, только эран у многих так себе..
    можно еще посмотреть хуавеи
    Ответ написан
  • Насколько Kestrel актуален для self-hosted web-сервера?

    Кестрел то актуален. Не актуальны сейчас пакеты с 2.2 и ранее.
    Сейчас всё что связано с aspnetcore идёт сразу вместе с sdk, а не как раньше (всё ещё выглядит как очень странное решение со стороны мс)

    И он используется по-умолчанию и так.
    https://learn.microsoft.com/ru-ru/aspnet/core/fund...
    Ответ написан
    3 комментария
  • Как удалить сессию из БД после истечения срока?

    1. Можно сессии хранить в чём-то типа редиса - там можно задавать ttl
    2. При хранении в обычной реляционке - можно на всякие события аутентификации, когда ты читаешь таблицу сессий - смотреть на ttl и удалять просроченные.
    3. Сверху ещё добавляем какую-нибудь задачу в cron, которая будет раз в сутки чистить.

    Но не совсем понял механизм, как сделать sign-out при не активности или полном истечении времени сессии. Единственное что приходит в голову это background tasks, но думаю, что есть более нормальные решения этой проблемы.

    Не обязательно удалять сессию сразу после её истечения - всё равно же при запросах проверяешь время действия.
    Ответ написан
    Комментировать
  • Как удалить сессию из БД после истечения срока?

    @mvv-rus
    Настоящий админ AD и ненастоящий программист
    В ASP.NET Core есть стандартный механизм сеансов (ISession): https://learn.microsoft.com/aspnet/core/fundamenta...
    Работает он на базе распределенного кэша (IDistributedCache), который штатными средствами можно базировать на MS SQL и на Redis (и, возможно, есть дополнительные сторонние пакеты для базирования на других СУБД,). Идентифкатор сессии хранится в куки (настраеваемой), по умолчанию - HTTP-only (но это настраивается).
    Механизм устаревания сеансов там есть, параметры тоже можно настроить.
    Кароче, если нет причин обязательно делать свой велосипед (типа, для учебной задачи) можно использовать этот стандартный механизм.
    Правда идея использовать этот механизм именно для авторизации у меня вызывает некоторые неясные опасения: он, вообще-то, не для того сделан. А именно для авторизации (плюс аутентифкация) в ASP.NET Core тоже есть штатное решение (Identity и политики авторизации). И вообще, аутентифкация/авторизация - это такое место, где легко накосячить, а потому лучше там обходиться без своих велосипедов.
    Ответ написан
    3 комментария
  • Форма обратной связи не сохраняет данные. Присылает пустые письма. Выдает ошибку "Name is required Email is required Message is required". почему?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Селекторы регистрозависимые

    У вас идентификаторы в html с большой буквы

    <input type="text" class="form-control" id="Name" placeholder="Иван Иванов">


    А в javascript с маленькой

    var name = $("#name").val();

    вот эти:
    id="Name"
    $("#name")


    Сделайте одинаково. Касается всех полей.
    Ответ написан
    Комментировать
  • Почему появляется ошибка при получении SSL-сертификата certbot?

    @Everything_is_bad
    Detail: DNS problem: NXDOMAIN looking up A for oo.dev - check that a DNS record exists for this domain; DNS problem: NXDOMAIN looking up AAAA for oo.dev - check that a DNS record exists for this domain
    А начни с того чтобы прочитать текст ошибки, там тебе явно описали проблему
    Ответ написан
    7 комментариев
  • Почему недоступна функция включения "Ненадежные приложения, у которых есть доступ к аккаунту"?

    StasisMD
    @StasisMD
    Google уже больше года тому запретил эту функцию (небезопасные авторизации по паролю) для обычных Gmail пользователей. Оставили только для корп. Google Workspace, но и им осталось буквально пару месяцев. Теперь доступны только приложения с авторизацией OAuth
    Ответ написан
    Комментировать
  • Как исправить "info: Microsoft.AspNetCore.Hosting.Diagnostics[2] Request finished HTTP/1.1 GET http://localhost:5183/favicon.ico - 400"?

    borisdenis
    @borisdenis
    Ленив и вреден...
    Насколько помню - лого запрашивает браузер. Если я открываю страницу апи, то он и лого запросит, если делаю запрос через curl, то никаких лого запрашиваться не будет.
    Ответ написан
    3 комментария
  • Как выполнить поиск по зашифрованому контенту?

    @rPman
    Есть ещё третий вариант - гомоморфное шифрование. Когда возможны операции над зашифрованным контентом, результат будет так же зашифрованный, и чтобы его прочитать его нужно расшифровать.

    Гугли, есть библиотеки и даже расширение postgres (очень старое, не факт что поддерживается).

    С практической точки зрения польза сомнительна. Ресурсов алгоритм жрет непомерно много и использовать его имеет смысл только если альтернативы в принципе нет.
    Ответ написан
    Комментировать
  • Для чего делают таблицы public?

    TaHKucT
    @TaHKucT
    Linux администратор
    public - это схема по умолчанию в терминалогии PG. Использовать разные схемы можно по разному, например создать схемы wp и zb в одной базе, и в wp.users хранить пользователей условного wordpress'а, а в zb.users условного zabbix'а (или подставьте любые другие приложения). Можно же создать схемы users и orders и в users.contacts хранить контактные данные пользователей, в users.names их ФИО, в orders.current текущие заказы, в orders.completed выполненые заказы и тп. В общем случае можно использовать как хотите, сам PG ни к чему не обязывает и многие эти схемы не используют(всмысле используют стандартную схему public не акцентируя на этом внимание).

    Почему "SELECT * FROM users" мог не сработать: вероятно у вас где-то изменена схема по умолчанию с public на что-то другое. Это можно проверить командой "SHOW search_path"(обычно она выглядит так):
    postgres=# SHOW search_path;
       search_path
    -----------------
     "$user", public
    (1 row)
    postgres=#

    Изменить search_path можно на стороне клиента, например "--search_path=new_search_path" в случае обычного psql, или на стороне сервера командой "ALTER ROLE SET search_path TO ;"

    Подробней про это можно, например, в документации postgrespro почитать
    Ответ написан
    1 комментарий
  • Какая опасность работы под чужим ИП?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Какая опасность работы под чужим ИП?

    Что значит "под чужим"? Используя данных ИП, к которому "один человек" не имеет отношения? УК РФ Статья 171. Незаконное предпринимательство.
    Что кроме увольнения если всплывет может произойти?

    У ИП нет понятия "увольнение", это не работник. Что может произойти еще помимо УК РФ Статьи 171? Денег "одному человеку" не заплатят, "один человек" же не являетесь исполнителем по документам.
    Ответ написан
    1 комментарий
  • Как настроить сервер для отладки вебхуков (webhooks) на локальной машине??

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    1. Сбилдить .NET приложение в докере.
    2. Развернуть докер контейнер на сервере.
    3. Развернуть nginx (тоже можно в контейнере) на сервере.
    4. Настроить nginx, который будет проксировать трафик в п2:
    4.1. Запретить все.
    4.2. Разрешить :80 и :443 порты.
    4.3. Пробросить с п4.2 на внешний порт контейнера п2.
    4.4. Настроить SSL Let's Encrypt (при необходимости).

    По сути, можно взять любое руководство настройки докера и nginx, без привязки к .NET.

    UPD на основе данных из комментариев, конфиги будут выглядеть примерно так, dockerfile (поправить под свое приложение):
    # Образ asp.net.
    FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
    WORKDIR /app
    EXPOSE 80
    EXPOSE 443
    
    # Компилируем приложение из /src.
    FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
    WORKDIR /src
    
    # Копируем файл проекта и восстанавливаем зависимости.
    COPY ["Project.csproj", "."]
    RUN dotnet restore
    
    # Копируем оставшиеся файлы и компилируем приложение.
    COPY . .
    RUN dotnet build -c Release -o /app/build
    
    # Публикуем приложение.
    FROM build AS publish
    RUN dotnet publish -c Release -o /app/publish
    
    # Создание итогового образа.
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "App.dll"]

    nginx (поправить под свое приложение):
    # http.
    server {
        listen 80;
        listen [::]:80;
        # Домены для обслуживания.
        server_name domain.ru www.domain.ru;
    
        # 301 редирект http->https.
        return 301 https://$host$request_uri;
    }
    
    # https.
    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        # Домены для обслуживания.
        server_name domain.ru www.domain.ru;
    
        # Пути до letsencrypt сертификатов.
        ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256";
    
        location / {
            # Адрес, по которому доступно приложение на локалке сервера (localhost не указывать, а указывать имя контейнера (project в моем случае)).
            proxy_pass http://project:80;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

    P.S. рекомендую освоить Docker Compose, чтобы было меньше возьни с разворачиванием и общением между контейнерами.
    Ответ написан
    8 комментариев
  • Почему Nginx отдаёт разный размер ответа для одной и той же картинки?

    @golubevvladislav Автор вопроса
    Вроде разобрался. Походу многие клиенты просто по таймауту отваливались. А всё из-за того, что картинку одномоментно загружают 12 тыс клиентов, из-за чего не хватает просто физически канала 100Мб/с. Меньше пропускная возможность - меньше можно одномоментно отдать данных. Увеличили канал до 500Мб/с - 98% клиентов теперь получают картинку в полном объёме.
    Ответ написан
    4 комментария
  • Есть ли приложение для визуального программирования нодами такого рода?

    Noizefan
    @Noizefan
    не совсем прям как ты хочешь, но я делал такой конструктор для нескольких своих проектов - https://github.com/methaqualon/dragncode
    Ответ написан
    2 комментария
  • Есть ли приложение для визуального программирования нодами такого рода?

    Tkreks
    @Tkreks
    Системный инженер
    Node-Red
    Можно развернуть в докере. Множество дополнительных нод доступно в палитре.
    Есть возможно писать свой код на JS из коробки, или с помощью дополнительных нод из палитры на python
    Ответ написан
    Комментировать
  • Как узнать, принадлежит ли точка к указанному отрезку?

    @deliro
    f1001.JPG
    Так получить уравнение прямой через 2 точки.
    Убедиться, что x0<= x <= x1 и y0 <= y <= y1 (x0 < x1, также, как и y0 < y1)
    Подставить точку в прямую.
    Проверить равенство.
    Приправить погрешностями.
    Ответ написан
    1 комментарий
  • Это и есть полиморфизм?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Нет.

    Полиморфизм, как следует из названия, это когда что-то маскируется под что-то другое. Это свойство системы типов языка на котором вы пишите, он может позволять вам делать вещи, маскирующие свой внешний вид ("названия") но все же это не та же вещь. Ну и стоит заметить что у полиморфизма есть еще разные виды. Например:

    Параметрический полиморфизм. Это когда мы можем написать один код, с одним набором имен, которые работает с разными типами аргументов. Пример - шаблоны из C++ или дженерики в Java. То есть "имена" методов одинаковые, потому что они в одном экземпляре. Реализация одна, одно поведение. А вот аргументы могут отличаться.

    Ключевое отличие от ad-hoc полиморфизма, про который будет ниже в том, что наша реализация понятия не имеет что придет на вход. Может придти что угодно и с этим нужно будет работать, однако работать с любым типом мы будем абсолютно одинаково.

    Полиморфизм подтипов. При этом у нас как раз таки будет одни и те же имена и может быть совершенно разное поведение. Например мы можем создать какой-то базовый тип, который, к примеру, отправляет email-ы, и создать его подтип, который вместо отправки email-ов записывает в лог то что мы хотели отправить, после чего уже отправляет данные дальше другому объекту этого типа (шаблон проектирования декоратор).

    Многие путают полиморфизм подтипов с наследованием, подменяя эти понятия. Без наследования мы конечно же не сможем достичь иерархии типов, но это больше механизм а не принцип.

    Ну и еще есть одно серьезное ограничение. Если мы хотим заменить в системе объект какого-то типа на объект подтипа (грубо говоря наследника), то система не должна сломаться. То есть "другое" поведение нашего подтипа должно быть совместимо в плане интерфейса с базовым типом. Об этом можно почитать загуглил "Принцип подстановки Барбары Лисков".

    Ad-hoc полиморфизм - это пожалуй самый интересный вид полиморфизма с которым можно долго холиварить. По сути при этом виде полиморфизма, у нас одинаковые имена, а поведение зависит от входящих аргументов. Пример - перегрузка методов в C++. Интересен этот вид полиморфизма в основном тем, что он не является "настоящим".

    При динамической системе типов не требуется никаких дополнительных возможностей вроде той же перегрузки методов для достижения ad-hoc полиморфизма. Тупо кидаем что хотим в функцию, а там уже if-ами рагребаем или же приводим к какому-то одному варианту. Отдельные конструкции нужны в языках со статической системой типов. То есть нам нужно еще на этапе компиляции кода знать какие именно типы могут приходить в наши методы, и в зависимости от оных вызывать тот или иной код.

    Среди PHP-разработчиков немало тех, кто мечтает увидеть в этом языке с динамической системой типов честную перегрузку методов как например в Java или C++. Просто так, потому что if-ы это плохо и лучше уж пусть они будут неявные на уровне компилятора/рантайма.

    Полиморфизм с приведением типов - еще один вид "не настоящего" полиморфизма. Мы "эмулируем" полиморфизм за счет того, что на уровне рантайма языка происходят касты действительного в желаемое. Например в PHP мы можем выставить у функции тайпхинтинг string, и можем внутри иметь одно и то же поведение для всех входящих аргументов. Передать же в качестве аргумента мы можем все что можно скастить в строку.

    Собственно, это очень похоже на параметрический полиморфизм по смыслу, но далеко не так гибко и не дает того контроля за системой.
    Ответ написан
    Комментировать
  • Как правильно организовать выборку зашифрованных данных PostgreSQL?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    Никак.

    Ловите своих DBA, архитектора, безопасников, начальство и совместно вникаете, существует ли вообще вектор атаки, от которого вы так пытаетесь защититься.
    Один постоянный универсальный ключ шифрования зашитый в приложении и открыто передающийся по сети - это больше профанация чем безопасность. И хорошо ещё, если ключ не сохраняется в логах базы вовсе в открытом виде.

    Если начальство решает, что да, такое шифрование необходимо и от чего-то защищает - то это будет прямым ответом на задачу: поскольку необходимо шифрование parent_iin, то быстрый поиск по этому полю невозможен.

    Единственное возможное исключение: если ваша функция шифрования обязуется быть immutable в терминах postgresql, т.е. на один и тот же ключ и исходные данные генерировать всегда один и тот же бинарно идентичный результат. Тогда делаете индекс по parent_iin и ищете по условию where parent_iin = функция_шифрования(данные, ключ) то есть по зашифрованному представлению данных.
    Ответ написан
    Комментировать