• Как выдернуть объект из массива с самым длинным полем?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    array.reduce((prev, cur) => cur.field.length > prev.field.length ? cur : prev)
    Ответ написан
    Комментировать
  • Как в Next.js изменить url страницы без обновления данных?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Как выяснил next/router использует Context API и обновляет свое внутреннее состояние, поэтому не получится осуществить данную задумку, но ее можно сделать с помощью window.history
    Может кому то пригодится
    window.history.replaceState(
                {
                    ...window.history.state,
                    as: href,
                    url: href
                },
                "",
                href
            )


    В целом мне нужно было с эмитировать визуально переход на новую страницу и возврат к предыдущей во время открытия и закрытия модельного окна, с изменением URL, TITLE. Получилось все отлично =)
    Ответ написан
    Комментировать
  • Как распределить элементы по высоте в трех колонках?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Попробовал узнать индекс с минимальным значением, для этого создал дополнительный массив и суммировал высоту элементов по индексу, но ничего не вышло
    Вот пример
    // Дополнительный массив
            var columnsHeight = Array.from({
                length: columnsCount
            }, function () {
                return [];
            });
    
            React.Children.forEach(children, function (child, index) {
    
                if (child && React.isValidElement(child)) {
                    const { sizeHeight } = child.props.document;
                    columnsHeight[index % columnsCount] = +columnsHeight[index % columnsCount] + sizeHeight
    
                    var minIndex = columnsHeight.indexOf(Math.min.apply(null, columnsHeight));
                    if (columns[minIndex]) {
                        columns[minIndex].push(child)
                    }
                    //columns[index % columnsCount].push(child);
                }
            });


    Распределяет не правильно, может где то ошибку допустил?
    Ответ написан
    Комментировать
  • Падает MongoDB из за нехватки памяти, как побороть?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Собственно решилась проблема именно откатом на предыдущие версии npm пакеты MongoDB и Mongoose. Не стал разбираться кто из них криво работал, думаю именно Mongoose...
    Ответ написан
    Комментировать
  • Как произвести слияние коллекций и получением только первой записи в массиве?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Сам допехал
    photos: {
     $arrayElemAt: [{
      "$map": { 
       input: "$photos",
       as: "p",
       in: { $concat: ['$$p.domain', 'folder/', '$$p.image'] } }
      }, 0 ]
    }
    Ответ написан
    Комментировать
  • Почему цена не пересчитывается?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Ответ написан
    Комментировать
  • Как более грамотно переписать подобный код?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Мне кажется эта конструкция лишняя на данном этапе по крайней мере
    if (player_chance > enemy_chance) {
    else if (enemy_chance > player_chance)

    Там разные переменные фигурируют, почему бы их последовательно не определить.
    И лишнее когда переменную переопределяете постоянно
    player_hp -= **
    Можно сделать что то вроде того (Примерно!)
    enemy_hp -= (p <= 10 && p > 7) && 40 || (p <= 7 && p > 5) && 20 || (p <= 5 && p > 0) && 10
    player_hp -= (e <= 10 && e > 7) && 40 || (e <= 7 && e > 5) && 20 || (e <= 5 && e > 0) && 10

    Ну и тут придется создать функции с цепочками действий, будет и понятно, и гибко

    Пока писал заметил что так будет даже лучше
    enemy_hp = hp(player_chance)
    player_hp = hp(enemy_chance)
    
    function hp(e) {
        return (e <= 10 && e > 7) && 40 || (e <= 7 && e > 5) && 20 || (e <= 5 && e > 0) && 10
    }

    Но и это еще улучшить можно
    Ответ написан
    Комментировать
  • На сколько важен PageSpeed от google в 2019?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Не важен, лишь бы не красный был, остальное не столь важно, да и видел даже в топе сайты которые в красной зоне висят и ничего.
    Ответ написан
    Комментировать
  • Как сократить запросы update при учете просмотров документа?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    В общем пока альтернативы нет, хочу попробовать следующий метод для разгрузки монги
    Вместо обновления коллекции решил писать идентификаторы в файл views.log
    function updateStats(request) {
        return fs.appendFileSync("views.log", `${request.document}|`, 'UTF-8') // request.document = часть URL по которой идет выборка
    }


    Ну и собственно дальше по крону буду дергать файл, перебирать данные, перезаписывать все скопом в ночное время
    Из файла куски кода
    //file.split('|').filter(function (e) { return e })
    
    function setCountObject(request) {
        return documents = [], Promise.all(request.map(async (document) => {
            return (item = documents.find(e => e.url === document)), item && (item.count = item.count + 1) || documents.push({
                url: document,
                count: 1
            })
        })), documents
    }
    
    function updateDocuments(request) {
        return Promise.all(request.map(async (document) => {
            return Collection.updateOne({ url: document.url }, { $set: { "stats.view": document.count }})
        }))
    }


    Монгу в пике трафика конечно разгрузить это, надо смотреть и тестить =)
    Ответ написан
    Комментировать
  • Как побороть, MongoDB 4.0 жрет всю память и падает, что можно придумать?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    И так, видимо дело было действительно в mongodb, всего скорее в ней была утечка.
    Сегодня обновился до 4.0.1, врубил top и наблюдал.
    Не увидел момента освобождения памяти, но mongod использовал около 45% памяти, когда я вновь в консольку глянул через час где то, то было уже 33% памяти, видать был сброс. Открыл лог mongodb, перезагрузок не было.
    Еще понаблюдаю конечно, но похоже либо криво встала, либо ошибка изначально в mongodb была
    mongostat тоже показывает что mongo меньше потребляет память, не на много, но меньше.
    Ответ написан
  • Почему result undefined?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    var a = "";
    Ответ написан
    Комментировать
  • Как прижать блоки к верху и низу при удаление контента в теле документа?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Один из вариантов, глянуть тут реализацию csstemplater.com
    Ответ написан
    Комментировать
  • Как сократить время выполнения сложного текстового запроса?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    При разбитии запроса на два, получилось сократить время, но не на столько на сколько хотелось бы.
    Был взять запрос выполняющийся за 4.9ms и удалось сократить его до 1.1ms
    return Wallpapers
            .aggregate([
                { $match: { public: { $gte: 2 }, $text: { $search: 'сам запрос' } } },
                { $project: { _id: 1, score: { $meta: "textScore" } } },
                { $sort: request.sort },
                { $skip: request.skip },
                { $limit: request.limit },
                { $group: { _id: null, uid: { $push: '$_id' }}}
            ]).then(e => {
                return e.length ? Wallpapers.aggregate([
                    { $match: { _id: { $in: e[0].uid }} },
                    {
                        $lookup: {
                            from: 'users',
                            localField: 'owner',
                            foreignField: '_id',
                            as: 'owner'
                        }
                    },
                    { $project: {
                        _id: 1,
                        image: { $concat: ['$domain', 'o/', '$image', '?route=thumb&h=350'] },
                        large: { $concat: ['$domain', 'o/', '$image', '?route=mid&h=750'] },
                        href: { $concat: [request.CONST.href, 'wallpaper/', '$url', '.html'] },
                        hrefClass: config.hrefAddClass,
                        tags: { $slice: ['$tags', 12] },
                        size: {
                            width: { $trunc: { $multiply: [ { $divide: ['$size.width', '$size.height'] }, 350] } },
                            height: { $trunc: 350 }
                        },
                        style: {
                            $concat: [
                                'background-color: rgb(',
                                { $toLower: { $arrayElemAt: [ '$pixels.rgb.r', 0 ] } }, ',',
                                { $toLower: { $arrayElemAt: [ '$pixels.rgb.g', 0 ] } }, ',',
                                { $toLower: { $arrayElemAt: [ '$pixels.rgb.b', 0 ] } }, ')'
                            ]
                        },
                        owner: { $arrayElemAt: [ '$owner', 0 ] },
                        likes: 1,
                        indexAt: 1,
                        title: 1,
                    }}, {
                        $group: {
                            _id: "$_id",
                            image: { $first: '$image' },
                            large: { $first: '$large' },
                            href: { $first: '$href' },
                            hrefClass: { $first: '$hrefClass' },
                            tags: { $first: '$tags' },
                            size: { $first: '$size' },
                            style: { $first: '$style' },
                            owner: { $first: {
                                _id: '$owner._id',
                                name: '$owner.name',
                                avatar: { $concat: ['background-image:url(', '$owner.avatar', ')'] },
                                href: { $concat: [request.CONST.href, '$owner.username', '/'] }
                            } },
                            likes: { $first: '$likes' },
                            indexAt: { $first: '$indexAt' },
                            title: { $first: '$title' }
                        }
                    }
                ]).then() : []
            })


    Если будут у кого другие варианты, напишите пожалуйста =)
    Ответ написан
    Комментировать
  • Объясните простым языком, что делает эта строчка?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Это условие, если переменная successful что то содержит, значит msg равно successful, иначе unsuccessful
    В обще это тоже самое что и
    var msg = 'unsuccessful'
    if(successful) msg = 'successful'

    Еще можно писать так
    var msg = successful && 'successful' || 'unsuccessful';
    Ответ написан
    2 комментария
  • Не получается сделать request?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Не так
    request({
    А так
    request.get({
    или 
    request.post({
    Ответ написан
    Комментировать
  • Как скачать видео по ссылке используя Node.js?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    async/await + request-promise + цикл через Promise.all(...) = профит 100%
    Сам гружу, только не видое, а тяжеловесные фото, раньше тоже мучался с недокаченными фото (когда с PHP на ноду пересел)
    Ответ написан
    2 комментария
  • Не проходит пост запрос на поддомен (Access-Control-Allow-Origin), как решить проблему?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    Проблема была с Nginx
    Ответ написан
    Комментировать
  • Может ли пользователь отправить ajax-запрос?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Может конечно, даже если у вас на сервере скрипта не будет, сам напишет свой и отправит.
    Защищаться от таких действий надо на стороне сервера проверки делать, копайте в сторону csrf token, он отсекет запросы с чужих доменов и прочее, но и этого недостаточно будет в вашем случае, нужно еще проверки делать, частота обращений с одной сессии, может какой то ключ кодировать и сверять на сервере. Вариантов на самом деле масса, все сугубо индивидуально и возможно какую то жесткую проверку делать не целесообразно.
    Я лично стараюсь избегать подобного, смысла нет костыли делать, когда проще ногу вылечить
    Ответ написан
    Комментировать
  • Почему letsencrypt создает новые сертификаты в новом каталоге?

    ms-dred
    @ms-dred Автор вопроса
    Вечно что то не то и что то не так...
    В общем при моей проблеме похоже решение указать в запросе название сертификата
    --cert-name domain.ru
    Тогда пишет что будет добавлен новый домен, а старые неуказанные будут удалены.
    Так что это должно работать!
    Сейчас только лимит исчерпан, и надо подождать, пишет
    An unexpected error occurred:
    There were too many requests of a given type :: Error creating new cert :: too many certificates already issued for exact set of domains: ....домены... see https://letsencrypt.org/docs/rate-limits/
    Ответ написан
    Комментировать
  • Есть ли смысл дальше учить?

    ms-dred
    @ms-dred
    Вечно что то не то и что то не так...
    Зависит от того понадобится ли JS вам в будущем, если нет, то и смысла нет, а если будете сайты делать, то хочешь не хочешь, а разбираться придется. Сегодня не один проект без JS не обходится, раньше было проще, но не сейчас, сегодня JS уже на бекенде вовсю, так что динамика его применения только расширяется, как следствие у вас просто выхода нет, если будете что либо разрабатывать для веба
    Ответ написан
    Комментировать