Задать вопрос
  • Чему будет равна сложность этого алгоритма?

    wataru
    @wataru Куратор тега Алгоритмы
    Разработчик на С++, экс-олимпиадник.
    Зависит от размеров item. Если они там каждый O(N) размера, то ваша догадка правильная: O(n^2 log n).

    Если же все item суммарно не превосходят N, то ответ O(N log N). Потому что если их размеры a_i, то у вас сумма ai log ai. log(ai) можно сверху ограничить log(N) и вынести за скобки и потом заменить сумму в скобках на N.
    Ответ написан
    1 комментарий
  • Как сделать так чтобы в 00:00 происходило действие?

    @Drno
    засунуть нужный скрипт в crontab
    Ответ написан
    Комментировать
  • Есть ли такой браузер, который позволит смотреть код в iframe?

    DevMan
    @DevMan
    эмм.... код в айфреймах спокойно показывается в девтулзах.
    Ответ написан
    4 комментария
  • В чем сложность поддержки проектов на Go?

    EvgenyMamonov
    @EvgenyMamonov Куратор тега Go
    Senior software developer, system architect
    Более четырёх лет пишу на Go, лично для меня поддерживать проекты на других языках сложнее ))
    До Go много лет писал на Perl/PHP/Python/Java/C/Ruby on rails/JavaScript и "крутил" еще не мало чего.
    Сейчас пишу только на Go и Python.

    Основная сложность в Go - это то, что если вы начинаете писать "криво" - то писать так очень трудно :))
    Подход к реализации в Go достаточно непривычный для тех, кто приходит из скриптовых языков.
    Например запрет циклических импортов - это самое первое, что "взрывает" мозг :)
    Нужно время чтобы адаптироваться после скриптовых языков.

    Про обработку ошибок - это да, это, пожалуй, единственное что мне не нравится в Go.
    Для себя я решил эту проблему за 1-2 часа :) и больше меня это не беспокоит.

    По ООП - в Go оно есть, лично мне оно нравится намного больше, чем ООП в других языках ))
    Всё, что реально нужно - всё есть, но при этом ничего лишнего нет.
    Интерфейсы - просто прекрасны :)) Каналы, горутины - это просто "счастье" :))

    А если объективно - то я бы не стал говорить о сложности поддержки проекта применимо к какому то конкретному языку.

    Как правило сложность поддержки возникает там, где нормальная архитектура не заложена в проект.
    Т.е. проект как могла так и писала куча людей плюс, как обычно, сделать нужно было побыстрее )), от этого никто вообще не думал об архитектуре и получилось то, что получилось :))
    Про покрытие тестами и документацию мы вообще не говорим )))

    А когда в таком проекте нужно что-то доработать или исправить ошибку, то почти всегда очень не просто найти то место, где нужно править, и после правок в одном месте, как правило, что-то ломается в другом :)

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

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

    Хочется добавить, что как бы не писали про Go, что он простой и т.д. - он явно сложнее Python/PHP и т.д.
    Это еще один повод сказать, что поддерживать код на Go сложно ))

    Также стоит учитывать, что проекты которые пишут на Go зачастую сложнее, чем проекты для которых выберут скриптовый язык. Go выбирают когда планируются большие нагрузки, параллельная обработка чего-либо и т.д., а это, в свою очередь, дополнительно усложняет проект.
    Ответ написан
    7 комментариев
  • Почему некорректно считается req_limit?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    Давайте разберём самое начало процесса, когда запускается ab и в нгинкс примерно одновременно начинают лететь 80 запросов. Счётчики в этот момент по нулям, но выставлен лимит в 1000 rps, то есть запросы могут обрабатываться не чаще, чем раз в 1 мсек.

    По факту, внутрь провалятся ровно 1+10=11 запросов, а остальные 80-11=69 отобьются с 503 кодом - это даже больше 62%.

    В дальнейшем, поскольку запросы постепенно размажутся во времени, перестав приходить синхронно, процент отлупов снизится, но отнюдь не до ожидаемых вами (1026-1000)/1000*100%, потому что время от времени (и скорее часто, чем редко) запросы всё-таки будут приходить чаще, чем раз в 1 мсек (бурст в 10 rps можно не учитывать, он по сравнению с лимитом микроскопический) - на это намекает среднее время исполнения 0.974 мсек, делёное на 80 потоков.

    Попробуйте увеличить бурст, скажем, до 500-1000 и посмотреть, как это отразится на результатах.
    Ответ написан
    9 комментариев
  • Что хранит в себе данная функция?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Комментировать
  • Nginx + php-fpm: где накапливается очередь для процессов и можно ли мониторить эту очередь?

    ky0
    @ky0 Куратор тега Nginx
    Миллиардер, филантроп, патологический лгун
    С остальными 900 запросами, скорее всего, произойдёт 504. Для размазывания нагрузки можно поиспользовать модуль нгинкса limit_req.
    Ответ написан
    4 комментария
  • Поясните пожалуйста bash скрипт?

    @RayHex
    1. https://tldp.org/LDP/abs/html/process-sub.html
    2. bash это интерпритатор, вы всегда можете вставить куски выражения, и посмотреть что они выдают, например:
    echo <(ls -1 .)
    /dev/fd/63

    3. Ваш код мягко говоря дурно пахнет, а по сути он вообще кривой и будет сбоить на файлах со спецсимволами или даже пробелами. Можно сделать проще и правильнее:
    shopt -s nullglob
    for f in my_temp_dir/*; do
        echo "$f"
    done

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

    vabka
    @vabka Куратор тега Веб-разработка
    Отправить на эту почту письмо с ссылкой для продолжения регистрации.

    Больше никак
    Ответ написан
    Комментировать
  • Что это за хэш/шифр?

    Судя по тому что тут 33 уникальных символа, можно предположить, что это текст на русском языке, закодированных шифром подстановки.
    Вот частота использования:
    P: 48 (9.14 %)
    V: 41 (7.81 %)
    Q: 38 (7.24 %)
    S: 37 (7.05 %)
    H: 32 (6.10 %)
    F: 31 (5.90 %)
    G: 27 (5.14 %)
    M: 25 (4.76 %)
    c: 23 (4.38 %)
    T: 21 (4.00 %)
    b: 20 (3.81 %)
    n: 20 (3.81 %)
    J: 16 (3.05 %)
    4: 15 (2.86 %)
    5: 13 (2.48 %)
    K: 12 (2.29 %)
    1: 10 (1.90 %)
    B: 10 (1.90 %)
    k: 9 (1.71 %)
    R: 8 (1.52 %)
    y: 8 (1.52 %)
    U: 8 (1.52 %)
    e: 7 (1.33 %)
    2: 6 (1.14 %)
    q: 6 (1.14 %)
    3: 6 (1.14 %)
    r: 6 (1.14 %)
    i: 5 (0.95 %)
    Z: 5 (0.95 %)
    a: 4 (0.76 %)
    C: 4 (0.76 %)
    W: 3 (0.57 %)
    A: 1 (0.19 %)
    Ответ написан
    Комментировать
  • Почему в firefox возвращает json вместо страницы?

    @Flying
    Это происходит из-за неправильной организации работы с HTTP.

    Вы запрашиваете данные через XMLHttpRequest методом GET и по тому же url, что и сама страница. В результате получается, что у вас один и тот же HTTP метод и один и тот url отдают два разных ответа в зависимости от... непойми чего (видимо проверяется заголовок X-Requested-With), но это явно не то, что описано в спецификации HTTP.

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

    Убедиться в том, что это так, можно очень просто: достаточно открыть dev.tools и на вкладке Network включить опцию "Disable cache". После этого вы увидите что проблема исчезла.

    Правильным решением будет выделение API для XHR запросов фильтра в отдельный endpoint. Также логичнее будет использовать метод POST, а не GET.

    Если же не хочется переделывать - хотя бы добавьте к XHR запросам ещё один query параметр, например xhr=1 и убедитесь что он никогда не появляется в url страниц. Это сделает ваши url для страниц и XHR запросов разными и уберёт проблему.

    Также имеет смысл пересмотреть объём данных, передаваемых в ответ на каждый запрос, ведь вам нужны только значения, передавать постоянно почти 100кб текста описаний нет особого смысла, они у вас и так уже есть.
    Ответ написан
    4 комментария
  • Каков алгоритм решения данной задачи по криптографии? Шифр какого типа используется?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Решение будет либо перебором, либо аналитически. Частотный анализ пробовать можно, но на таком маленьком тексте он вряд ли даст хороший результат.
    Аналитическое решение
    Смотрим внимательно. Обнаруживаем комбинацию "emc-mc". Можно преположить, что это "что-то" или "кто-то". Есть отдельно стоящая "e", что может соответствовать предлогу "к". Получаем (e => к, m => т, c => о). Заменяем по всему тексту.
    Находим комбинацию "og". Это может быть "об", "он", "от", "ох". Но "т" мы уже определили. Находим "gnsоgxтg2n" и "zтatgg2n". Предполагаем, что "g" соответствует "н", так как комбинации "тб" и "хх" в русском языке встречаются редко. Заменяем (g => н).
    Теперь у нас есть "zтatнн2n" и "нnsонxтн2n". "2n" - это окончание, где "n" может соответствовать "я", "е", "й", "м", "ю", "х". Ещё встречается "anqкn", значит (n => е). Заменяем.
    Видим "неsонxтн2е" Логично предположить, что это "непонятн2е". Заменяем (s => п, x => я).
    Находим "пaонеzzя". Очевидно, (z => с, a => р).
    "стрtнн2е" и "t он" дают нам замену (t => а).
    "какjе" даёт (j => и), так как "о" уже есть.
    "оqки" (q => ч).
    "какие странн2е" (2 => ы).
    "исчеf" (f => з).
    "крbчки" (b => ю).
    "на iетаwwическиh крючкаh" (i => м, w => л, h => х).
    "стоял l речки" (l => у).
    "пустился o лес" (o => в).
    "поpпрыrнул" (p => д, r => г).
    "вдол5" (5 => ь).
    "в галоdах" (d => ш).
    "он yегом пустился" (y => б).
    "я побеuал" (u => ж).
    "доvечки"(v => щ).
    Ответ написан
    Комментировать
  • Как работает Hmac?

    SagePtr
    @SagePtr
    Еда - это святое
    Ответ написан
    Комментировать
  • Как сделать, чтобы bindFunction привязывала любое кол-во аргументов возвращаемой функции?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    const bindFunction = (F, ...args) => F.bind(null, ...args);
    Ответ написан
    Комментировать
  • Как перемешать массив в псевдослучайной последовательности?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Генератор случайных чисел и так работает на основе некоего стартового значения (seed). Так что если вы ему скормите ID статьи, он ван наштампует всегда одинаковый, но случайный набор чисел.
    Ответ написан
    Комментировать
  • Как подключить js библиотеку на страницу?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Эта библиотека предназначена для сборки. Это скорее тулза для генерирования компонентов, а не для работы на лету.
    В теории ты можешь её подключить и на живую, но через зад.
    Ответ написан
    Комментировать
  • Если практически не знаю JS и TypeScript к изучению Angular бессмысленно приступать?

    azerphoenix
    @azerphoenix
    Java Software Engineer
    Изучать Angular или любой другой js фреймворк без владения js или ts равноценно, как строить ракету, не зная физику. Может быть что-то вы и построите, но полетит ли?

    Вывод:
    Изучите язык, чтобы иметь возможность пользоваться инструментом.
    Ответ написан
    Комментировать
  • Как реализовать политику CORS в fetch?

    Seasle
    @Seasle Куратор тега JavaScript
    - res.writeHead(200, { 'Content-Type': 'text/plain' });
    + res.writeHead(200, {
    +     'Content-Type': 'text/plain',
    +     'Access-Control-Allow-Origin': '*'
    + });
    Ответ написан
    4 комментария
  • Как задать права только на каталоги в Linux?

    @pfg21
    ex-турист
    канешно. в линукс можно всё и еще чуть-чуть :)
    find /path/to/req -type d -exec chmod 0755 {} \;
    find /path/to/req -type f -exec chmod 0644 {} \;

    - type d (directory) - папки прощеее говоря.
    - type f (file) - файлы
    /path/to/req - путь, "внутри" котрого начинается просмотр. (./ для текущего)
    - exec над каждым найденным сделать действие
    chmod *** {} \; change mode - изменить параметры файла. {} \; -вместо этого подставляется путь к файлу.
    Ответ написан
    1 комментарий