• Как сгенерировать строку из регулярного выражения на .NET?

    @pro100Code
    TechnoCraft Designer Developer
    Чтобы генерировать строки из регулярных выражений без необходимости вручную проверять их валидность, ты можешь попробовать библиотеку Fare. Она создана для таких задач и работает корректно с генерацией валидных строк по регулярным выражениям.

    используй Xeger generator = new Xeger(pattern);

    Xeger — это класс в библиотеке Fare, который генерирует строки на основе регулярного выражения без необходимости проверять их валидность.

    Таким образом, Fare избавит тебя от необходимости вручную проверять строки, и ты сразу будешь получать корректные результаты на выходе.
    Ответ написан
    6 комментариев
  • Не упадет ли производительность дисков m2 при добавлении в сетап видеокарты?

    @pro100Code
    TechnoCraft Designer Developer
    Смотри, ситуация у тебя такая: если ты собираешься воткнуть видеокарту в слот PCIe и при этом у тебя уже заняты слоты M.2, то тут всё зависит от того, как распределяются линии PCIe на материнской плате.

    У твоей материнской платы ASUS TUF H370-PRO GAMING есть два слота PCIe 3.0 x16, но из них реально x16 линий доступно только для верхнего слота (там, где обычно видеокарта и должна стоять). Нижний слот PCIe обычно работает на x4, то есть там пропускная способность уже меньше. M.2 слоты тоже берут свои линии PCIe.

    Если ты используешь два M.2 NVMe диска в режиме PCIe, то они тоже забирают линии PCIe от процессора или чипсета. Проц i9-9900K поддерживает 16 линий PCIe, и обычно все они уходят на видеокарту. А вот для остальных устройств (например, M.2 слотов и адаптеров) линии распределяются чипсетом.

    Если ты воткнешь видеокарту в нижний слот PCIe 3.0 x4, она будет ограничена четырьмя линиями, что по сути может снизить её производительность в сравнении с тем, если бы она стояла в верхнем слоте x16.

    По поводу дисков: скорость NVMe дисков просядет, если они будут делить линии с другими устройствами. Но в твоем случае, если ты поставишь видеокарту в нижний слот и все M.2 слоты работают в режиме PCIe, они будут конкурировать за линии. Это может вызвать небольшое падение производительности, но обычно это не критично, если не идёт сильная нагрузка одновременно на все устройства.

    Итог: идеально будет ставить видеокарту в верхний слот PCIe x16, а диски оставить в M.2 и адаптере. Если воткнёшь её в нижний слот x4, то может быть просадка по производительности, особенно при нагрузке.
    Ответ написан
  • Почему элемент скрывается под другими и как это исправить?

    @pro100Code
    TechnoCraft Designer Developer
    Здарова! Тут тема скорее всего в том, что ты сетке задал z-index: -1, а это значит, что она всегда будет под всеми остальными элементами. Когда элемент с z-indexом меньше чем у других блоков, он просто прячется под ними. Прозрачность тут не спасает, потому что блоки всё равно будут перекрывать сетку.

    Чтобы сетка нормально отрисовывалась поверх, можешь попробовать задать сетке более высокий z-index (например, z-index: 0 или больше), а другим блокам назначить z-index, который будет меньше или равен 0, или просто не трогать их z-index, если не нужно.

    Вот так попробуй:
    #bgsvg {
        position: fixed; /* Поменял position на fixed для фиксации сетки */
        background-position: center;
        background-repeat: no-repeat;
        background-image: url("../images/bg.svg");
        background-size: auto;
        z-index: 0; /* Повышаем индекс, чтобы сетка была выше остальных элементов */
        width: 1602px;
        height: 642px;
    }


    Тут мы ещё position: fixed бахнули, чтобы сетка точно двигалась за пользователем и не пряталась под другими элементами. Твой background-attachment: fixed тоже можно убрать, потому что position: fixed уже всё это делает. Короче, попробуй так — должно помочь!
    Ответ написан
    Комментировать
  • Как проверить IP адрес отправителя своего домена в Exim?

    @pro100Code
    TechnoCraft Designer Developer
    Окей, смотри, тебе нужно настроить Exim так, чтобы он чекал IP-адреса для доменов, которые ты считаешь своими. Если домен твой, но письмо пришло с левого IP — блокируем его к чертям.

    Для этого тебе нужно создать файл /etc/exim/domainips, где пропишешь свои домены и их реальные IP-адреса, типа так:
    mydomain.com: 192.168.1.1
    anotherdomain.com: 192.168.1.2

    Теперь, в конфиге Exim (exim.conf) добавь вот такую проверку:
    acl_check_mail:
      accept  condition = ${if eq{$sender_address_domain}{+local_domains}{yes}{no}}
             condition = ${if match_ip{$sender_host_address}{lookup{$sender_address_domain}lsearch{/etc/exim/domainips}}{yes}{no}}
             message = "Чувак, IP не соответствует домену $sender_address_domain"


    Если настроишь всё так, то любой шлак с поддельных IP больше не проскочит.
    Ответ написан
    1 комментарий
  • Как избавиться от ошибки [missing_user_info_uri] при авторизации через Oauth2?

    @pro100Code
    TechnoCraft Designer Developer
    Ошибка [missing_user_info_uri] возникает, потому что Spring Security ожидает URL для получения информации о пользователе (UserInfo endpoint) в конфигурации, но ты не указал его для провайдера OAuth2. В случае с Headhunter API этот endpoint отсутствует в стандартной конфигурации, поэтому его нужно указать вручную.

    Попробуй добавить в свой application.properties параметр user-info-uri, чтобы указать Spring, где получать данные о пользователе

    После этого Spring должен корректно получать информацию о пользователе через UserInfo endpoint, и ошибка должна исчезнуть.

    Если не совсем понятно, напиши, попробую составить пример
    Ответ написан
    Комментировать
  • Как правильно присваивать типы результатам выполнения функций которые вернули ошибку?

    @pro100Code
    TechnoCraft Designer Developer
    В такой ситуации, когда ты не можешь менять исходную функцию, но хочешь обрабатывать ошибки, можно сделать дополнительный слой обработки в месте, где вызывается функция. Ты можешь использовать try-catch, чтобы перехватывать исключения и обрабатывать их как ValidationError. Вот пример:

    try {
      const response = await usersPassportLogin(usersPassportLoginBody, options);
      // Успешный ответ обрабатывай как обычно
      console.log('Login successful:', response);
    } catch (error) {
      // Здесь мы проверим, является ли ошибка ValidationError
      if ((error as ValidationError).errors) {
        const validationError = error as ValidationError;
        console.log('Validation Error:', validationError.errors);
      } else {
        console.log('Unexpected Error:', error);
      }
    }
    Ответ написан
    Комментировать
  • Какие есть бесплатные сервисы для хранения данных?

    @pro100Code
    TechnoCraft Designer Developer
    Есть несколько классных сервисов для хранения данных с доступом через API. Например, попробуй Firestore от Google — там можно хранить данные в формате JSON, доступ к ним удобный через REST API. Плюс у них есть бесплатный тариф для небольших проектов. Еще вариант — Airtable, у него удобный интерфейс и тоже API для интеграции. Оба этих сервиса дают возможность долгосрочного хранения данных, а не временного, как jsonbin.io.
    Ответ написан
    2 комментария
  • Как с удаленного сервера отправить запрос на POS терминал?

    @pro100Code Автор вопроса
    TechnoCraft Designer Developer
    Думаю самым адаптивным решение будет все таки создание Desktop приложения, которое будет кидать запросы на сервер через WS или HTTP и при их наличии перенаправлять их на POS терминал, получать ответ и посредством REST API отправлять обратно на сервер
    Ответ написан
    Комментировать
  • Избавиться от дублей или проверить наличие таблицы в базе?

    @pro100Code
    TechnoCraft Designer Developer
    Добрый день! Проблема с миграциями и запросами действительно может возникнуть, если таблицы ещё не существуют, а запросы к ним уже происходят.
    Прямую проверку существования таблицы можно выполнить через метод django.db.connection.introspection.table_names(), который возвращает список всех таблиц базы данных. Это позволит вам избежать излишней ручной работы с соединениями и подключениями.
    from django.db import connection
    
    def options_general_exists():
        tables = connection.introspection.table_names()
        if 'yourapp_general' in tables:
            return General.objects.filter(id='-1').first()
        return None
    
    data = {
        'menu': Menu,
        'options_general': options_general_exists(),
    }


    Лучший вариант — использовать introspection API от Django для проверки существования таблиц, так как это встроенный и безопасный способ для работы с базой данных без необходимости явно подключаться к ней через Python.
    Ответ написан
    1 комментарий