• Как продолжить скачивание после падения?

    @MadridianFox
    Web-программист, многостаночник
    Сделать такую докачку можно на любом языке, т.к. всё что нужно - это добавлять в запрос заголовки и определять размер файла в байтах.

    Докачка файла - это свойство протокола http. Если http-сервер поддерживает докачку, то он отдаёт заголовок Accept-ranges. Скачивая файл вы можете прервать загрузку, а когда решите докачать - отправить запрос на скачивание этого же файла, но уже с заголовокм Range: bytes=<count_loaded_bytes>-, тогда сервер начнёт отдавать файл с указанного места. Погуглите подробнее про эти заголовки.

    Это касается уже готовых http-серверов, которые полностью соответствуют стандарту. В вашем случае, наверное, необходимо отдающий сервер научить отдавать файл по стандарту. Т.е. если поступил запрос на скачивание файла, надо учитывать, что в заголовке может быть передано смещение, ну и отдавать файл начиная с этого смещения.
    Ответ написан
    Комментировать
  • Почему я получаю проблему нарушения уникальности в MongoDB?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Потому что MongoDB при построении текстового индекса разбивает строку на слова, затем удаляет так называемые стоп-слова и может их нормализовывать.
    Допустим у вас есть следующие 2 документа.
    {text: "Два красивых яблока" }
    {text: "Много яблок" }


    Когда будет сформирован текстовый индекс, произойдет следующее. На самом деле все происходит немного иначе, в целом процесс таков.

    Строка токенизируется на слова:
    "Два красивых яблока" → ["Два", "красивых", "яблока"]
    "Много яблок" →  ["Много", "яблок"]


    Далее слова нормализуются

    ["Два", "красивых", "яблока"] → ["два", "красивый", "яблоко"]
    ["Много", "яблок"] →  ["много", "яблоко"]


    Теперь начинается формирование словаря. Каждому слову начинаем присваивать номера.

    ["два", "красивый", "яблоко"] → [1, 2, 3], и словарь [1↔"два", 2↔"красивый", 3↔"яблоко"]
    ["много", "яблоко"]  →  [4, 3], и в словарь [1↔"два", 2↔"красивый", 3↔"яблоко", 4↔"много"]


    Т.е. получаем следующий набор в индексе
    [1→1, 2→1, 3→1]
    [4→2, 3→2]

    Т.к. это индекс, то разбиения объединяются в общий указатель
    1→1, 
    2→1, 
    3→1, 
    4→2 
    3→2


    А теперь смотрите, у нас индес объявлен уникальным, но указатели на записи повторяются, значит указатель не уникальный.
    Поэтому и возникает ошибка.

    Чтобы решить проблему, нужно создать 2 индекса.
    Первый - текстовый, но без требования уникальности.
    Второй - уникальный, на основе бинарного дерева.
    Ответ написан
    2 комментария
  • Тестовое задание по Js, почему выдает ошибку?

    lazalu68
    @lazalu68
    Salmon
    Вроде всё работает
    3d3cae1cab22435eabcb9fb02483fb1f.gif

    Вероятно это не ваш код и вы не знаете как он работает, т.к. мне на адаптацию кода понадобилось несколько секунд.
    Ответ написан
  • Node.js - в чем причина и как бороться с ошибками "Request Interrupted" и "Idle connection", если они возникают в простом запросе?

    @keht Автор вопроса
    Сам же и отвечу на свои вопросы по прошествии пары лет : )

    1 - Проблема в парсинге реквеста на стороне ноды. Реквест содержит JSON body, который автоматом парсится нодой, и это внезапно безумно дорого даже при небольшом объеме данных (~10кб).

    2, 3 - Проблема исключительно на клиенте. Т.к. все клиенты - мобильные устройства, ситуация с подвисающим/отваливаюимся реквестом - норма. H15/H18 легко воспроизводятся, если сымитировать плохой/пропадающий коннекшн на устройстве.

    4 - Причина в количестве данных. Чем дальше в игре дошел игрок, тем жирнее его реквесты. А чем больше данных, тем дольше обрабатывается реквест (п.1) и тем больше шансов, что что-то пойдет не так.

    5 - Для ускорения запроса отказываемся от JSON body в реквесте, передаём параметры другим способом. С H15/18 ничего на стороне сервера не поделать, поэтому делаем магию на клиенте, чтобы он умел справляться с недошедшими запросами.
    Ответ написан
    Комментировать
  • Какие курсы лучше выбрать?

    @Rumiour
    Если понимаешь английский, то лучше этого чувака не найти.
    Ответ написан
    Комментировать
  • Динамическая облать видимости, что это такое?

    @vshvydky
    1. вызов функции sayHello
    2. инициализированы локальные переменные name = "Todd"
    text = "Hello, Todd"
    3. функция хеллотод получает в возврат анонимную функцию наследника функции сейхелло, в замыкании держа значение:
    b289bdb319394f3e92381799a996829e.PNG
    4. Вызов анонимной функции, которая видит в своей зоне видимости данные из text = "Hello, Todd" и пишет это в лог.
    Ответ написан
    9 комментариев
  • Как попадают значения username и password в Password js?

    По-умолчанию LocalStrategy ищет поля username и password в `req.body`. Но так как у вас данные приходят в другом формате - вам необходимо либо руками доложить в req.body нужные данные, либо подключить body-parser, чтобы он раскодировал входящий json, + нужно указать LocalStrategy от куда забирать данные. Делается это примерно так:

    const bodyParser = require('body-parser');
    
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(bodyParser.json());
    
    passport.use(new LocalStrategy({
      usernameField: 'remodal[email]',
      passwordField: 'remodal[password]'
    }, function(username, password, callback) {
      console.log(username, password);
    }));
    
    app.post('/login', passport.authenticate('local', {
      successRedirect: '/',
      failureRedirect: '/login'
    }));


    Код не тестировал, но идея надеюсь ясна.
    Ответ написан
    1 комментарий
  • Какие знания надо иметь для того что бы решить данную задачу?

    @archelon
    Очевидно, что если вы не знаете, как сделать, то браться за эту работу не стоит.
    Ответ написан
    2 комментария