Задать вопрос
  • Как сделать так, чтобы бот запретил писать сообщения в группе?

    EveningEugene
    @EveningEugene
    Unity-разраб
    1. Научиться ботом отслеживать любые сообщения пользователей.
    2. Научиться удалять сообщения.
    3. Научиться выдавать разные командные кнопки в зависимости от полномочий в группе.
    4. Научиться сохранять состояние по команде.
    5. Научиться проверять состояние.
    6. Объединить всё вышеописанное в единую фичу.
    Ответ написан
    Комментировать
  • Как запустить 5000 потоков параллельно с GET запросами?

    @danSamara
    У вас IO-bound задача, а это значит:
    1. Вам нужно асинхронное решение, которое позволит избавится от времени ожидание IO операций в основном цикле программы.
    2. Необходимо знать максимальное время обработки ответа (назовём его response_processing_time).
    3. Необходимо знать минимальное время запроса (timeout) - время, в течении которого удалённый сервер не оборвёт связь (пусть будет request_time_out).

    Последние два параметра связаны: response_processing_time > request_time_out * количество_запросов. То есть, если вы обрабатываете ответ сервера за 1мс или, другими словами обрабатываете 1000 запросов в секунду, это значит, что для тысячи запросов время соединения не должно быть меньше секунды. Для 5000 одновременных запросов - 5 секунд соответственно.
    Это ограничение фундаментально и обойти его не получиться - можно только оптимизировать: или железом - задействовать дополнительные ядра процессора и/или программно - уменьшением времени обработки запроса.
    Очевидно, что эти расчёты верны только для постоянного потока запросов, если у вас возможны паузы между запросами, то их надо вносить как поправочные коэффициенты.

    Касательно сути вопроса - на чём лучше делать, я бы рекомендовал Go - идеальный язык для всяких сетевых штук, можно сказать, это его родная стихия. Тем более, что задача простая и её реализация не должна занять много времени даже для человека, который никогда с GoLang дела не имел.
    Ответ написан
    Комментировать
  • Как запустить 5000 потоков параллельно с GET запросами?

    Vamp
    @Vamp
    Распараллелить выполнение в самом воркере с помощью ReactPHP или лучше GuzzleAsync. В таком случае не придется держать 5000 воркеров именно

    Вариант с GuzzleAsync - самый лучший. Под капотом он использует возможности curl_multi_exec, которые позволяют асинхронно отправлять несколько запросов, не плодя при этом лишние процессы. Не уверен конечно, что осилит 5000 параллельных запросов, но даже если и не сможет, то можно разделить 5000 между несколькими воркерами.

    2. "Правильно ли" это вообще делать с помощью PHP или это все таки задача уже других языков которые умеют в параллельное выполнение, корутины? Go, NodeJs?

    У вас нагрузка в основном IO bound, так что не имет значения какой язык выбрать. Главное чтобы он поддерживал IO multiplexing (который поддерживается в PHP через вышеупомянутый curl_multi_exec).

    3. Может уже есть готовые решения в виде библиотек на PHP? Искал, но не нашел

    Guzzle
    Ответ написан
    3 комментария
  • Должен ли WEB-разработчик уметь настраивать VPS/сервер?

    Adamos
    @Adamos
    Вопрос "должен ли" - всегда идиотский. Никто никому ничего не должен. В частности, нанимать и платить.
    Если вы такой крутой фронтендер, что вас ценят именно на этом фронте настолько, чтобы работодателю было жалко тратить ваше ценное время на настройки, он лучше наймет девопса - скорее всего, вам это все не понадобится.
    Но как можно стать крутым специалистом, вообще не интересуясь настолько смежными областями? Я не знаю.
    Вы такими сомнениями и прикидками сами себе ограничиваете рост статусом веб-макаки, которую можно только посадить в опенспейс на узкоспециализированную работу и до настройки серверов просто не допускать. Зато - "не должен", да...
    Ответ написан
    3 комментария
  • Почему нельзя хранить важные данные в localStorage и вообще, JWT чем-то опаснее cookie?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Важные данные обычно никогда не хранятся на клиенте, они передаются, используются и удаляются.

    Есть ли какие-то ситуации, когда использование httpOnly сессионной куки нас защищает, а вот использование localStorage и sessionStorage уязвимо?

    Если есть компроментация клиента, то никак не защищает. Единственное место, это где JS вообще в принципе не используется, т.е. клиенты с отключенным JS. Ну это как в рыцарских доспехах ходить по улице. Неудобно, но вроде как защищает от меча. Только с мечом уже давно не ходят, все больше с автоматами.

    Теперь про токены. Токены в теории лучше всего держать не в localStorage, а в sessionStorage. Это хранилище переживает перезагрузки страниц и не расшарено между табами. Т.е. при открытии того же самого адреса в новом табе будет созданая новая сессия. Хранилище очищается при закрытии браузера и таба. Но это жутко неудобно, каждый раз логиниться. Поэтому здравая логика говорит об использовании localStorage, хотя если вы совсем отбитый, то можете хранить токен в сессионой куке.

    Если вы прочли те статьи внимательно, то можно понять, что преимущества сессионных кук нивелируются неудобством их использования.
    JWT Токены предназначены для микросервисной архитектуры. Т.е. у вас есть некоторый центр аутентификации, который выдает вам токен. Токен этот подписан относительно стойкой криптографией и постоянно ротируется.
    Этот токен передается другим микросервисам, которые могут его верифицировать через публичные ключи (JWKS).
    Т.е. если вы хотите, вы можете строить свои сервисы так, что они доверяют не только вашему центру аутентификации, но и гуглу с амазоном через OpenID. Есть ситуации, например когда вы хотите разрешить доступ к сервису сотрудникам другой компании. Например, когда такая компания огромна (десятки тысяч сотрудников). Они аутенфицируются у себя, а вы проверяете, что токен выпущен сервисом данной компании. Это не так сложно реализовать.
    Реализация авторизации лежит на плечах каждого микросервиса и напрямую завязана на бизнес-логику. Как правило это некий внутренний микросервис, который интегрирован c middleware микросервиса.
    Ответ написан
    5 комментариев
  • Почему не находится запись в базе данных при проведении теста?

    @Pavlvdv
    В конфигурацию Yii2 добавьте transaction: false (https://codeception.com/for/yii)
    Ответ написан
    Комментировать
  • Как поменять кодировку в php?

    yupiter7575
    @yupiter7575 Автор вопроса
    Python программист
    Нашел проблему. Надо было написать mysqli_set_charset($connect, 'utf8'). Я балда, кодировку через дефис писал.
    Ответ написан
  • Как по 1 разу выполнять действие в беск. цикле каждый раз, когда есть совпадение?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    import datetime
    time= ['19:44', '19:45']
    founded = ''
    while True:
        nowtime = datetime.datetime.now().strftime("%H:%M") 
        if nowtime in time:
            if nowtime != founded:
                print("Есть совпадение")
            founded = str(nowtime)
    Ответ написан
    5 комментариев
  • Каков русский Open Sourse?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Kotlin, IntelliJ IDEA, ClickHouse, Sphinx и ещё куча всего.
    Ответ написан
    2 комментария
  • Как исправить ошибку при переходе на php 7.4?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Ошибка возникает из-за отсутствия ключа 'use_lib', то есть следует проверить сначала наличие ключа, а только затем его значение:
    function useMobileDetectLib() {
        $settings = new Fseo_Sett;
        $use_lib = $settings->getSetting('use_lib');
        if (is_object($use_lib) && $use_lib->value == '1') { 
            require_once 'Mobile_Detect.php';
        }
    }
    Ответ написан
    1 комментарий
  • Можете написать по-простому?

    kshnkvn
    @kshnkvn
    yay ✌️ t.me/kshnkvn
    array = list()
    for x in root.xpath('.//tr'):
        a = x.xpath('.//td[2]')[0].text
        b = x.xpath('.//td[4]')[0].text
        array.append([a, b])
    Ответ написан
    Комментировать
  • Как проверить, заканчивается ли строка на число, с учётом пробела?

    0xD34F
    @0xD34F Куратор тега Регулярные выражения
    (\d+)\s*$
    Ответ написан
    Комментировать
  • Как проверить, заканчивается ли строка на число, с учётом пробела?

    Aetae
    @Aetae
    Тлен
    Откройте, пожалуйста, список символов в регулярных выражениях и прочитайте один, ровно ОДИН раз, полностью. Даже если вы не запомните всё с первого раза, то у вас в голове всё равно отложатся принципиальные возможности, которые можно будет подсмотреть при необходимости. Таких тупых вопросов:
    В регулярке есть что-нибудь на тему пробела

    больше не возникнет.
    spoiler
    /(\d+)\s*$/
    Ответ написан
    Комментировать
  • Существует ли одно страничный инсталлятор программ?

    Jump
    @Jump Куратор тега Windows
    Системный администратор со стажем.
    Существуют разные конструкторы для создания инсталляторов.
    А уж какой именно вы создадите инсталлятор - это только от вас зависит.
    Я обычно одностраничники делаю в Winrar.
    Ответ написан
    Комментировать
  • Как вызвать эмулятор терминала (bash) через программу на СИ?

    CityCat4
    @CityCat4 Куратор тега C
    //COPY01 EXEC PGM=IEBGENER
    Можно по-топорному - через system(), при этом родительский процесс приостанавливается на время выполнения потомка.
    Можно более-менее правильно - через fork() и exec(), потом словить код возврата через waitpid()
    Ответ написан
    Комментировать
  • Безопасно ли такая авторизация и последующее открытие страниц?

    @alexalexes
    Эта конструкция небезопасна, если у программиста кривые руки.
    if($rows) {
    $logged = true;
    } else {
    $logged = false; 
    }
    } 
    else {
    $logged = false;
    }

    Статус авторизации очень критичен, и если возникает какая-нибудь ошибка в его проверке, то лучше, чтобы по умолчанию он оставался в значении "не авторизован", то есть false.
    С точки зрения безопасности системы, если произойдет какая-нибудь ошибка, то пользователь лучше не дополучит свой статус, чем случайно получит уровень выше привилегий.
    Поэтому до всяких проверок, инициируете состояние по умолчанию, а потом, выстрадав все проверки присваиваете true.
    // Секция, где присваиваются значения по умолчанию основных переменных
    $logged = false;
    .....
    ....
    // начинаем проверку
    if(первое условие)
    {
      if(второе условие)
      {
        if(еще какое-то супер-пупер условие)
        {
           $logged = true; // вот теперь, пройдя все медные трубы, мы изменяем статус
        }
      }
    }
    Ответ написан
    6 комментариев
  • Есть ли сервисы позволяющие сделать аудиосвязь для пользователей сайта?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Это называется WebRTC и для его настройки нужен высокий уровень навыков. Вам для чего вообще это надо? Чтобы организовать общение пользователей или для того, чтобы пользователи могли звонить вам прямо с вашего сайта через интернет?
    Ответ написан
    2 комментария
  • Есть ли сервисы позволяющие сделать аудиосвязь для пользователей сайта?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    да, любой сип провайдер

    если же браузер - браузер - там как повезет
    https://stackoverflow.com/questions/24928491/webrt...
    см ссылки оттуда
    Ответ написан
    Комментировать
  • Как прошерстать сайт?

    Из опыта скажу что, при однопоточном парсинге приходится делать тайм-ауты от 0,3 до 1 секунды. Соответственно, посчитайте врем затраты времени и аренды серверов/ip/адресов.
    Ответ написан
    Комментировать
  • Как прошерстать сайт?

    zkrvndm
    @zkrvndm
    Архитектор решений
    обрабатывать за один запрос десятки тысяч страниц одного сайта

    Ну если у вас достаточно денег, чтобы купить десятки тысяч прокси и минимум пару-тройку топовых физических серверов... то почему нет? Ах да, есть совсем маленький нюанс в виде разработки уникального ПО способного работать с такими объемами, но право слово, это будет герунда на фоне трат выше.
    Ответ написан
    7 комментариев