• Рандомное выпадение монетки на js?

    lastuniverse
    @lastuniverse
    Aleksandr-JS-Developer, jsfiddle

    Объясню на всякий случай.
    1. предположим у нас есть случайная величина распределенная равномерно в диапазоне от 0 до 2
    2. если мы данную величину будем округлять Math.round() то:
    - в 0 у нас попадут величины от 0 до 0.5 (что есть четверть от диапазона)
    - в 1 у нас попадут величины от 0.5 до 1.5 (что есть половина от диапазона)
    - в 2 у нас попадут величины от 1.5 до 2 (что есть четверть от диапазона)

    И из-за такого (неверного) округления и происходит смещение распределения округленных значений
  • Рандомное выпадение монетки на js?

    lastuniverse
    @lastuniverse
    Aleksandr-JS-Developer, что то я не вижу явного смещения распределения

  • Как получить максимальное число из массива?

    lastuniverse
    @lastuniverse
    что-то вы нас обманываете

    const r = Math.max(-78, -20, -10) 
    console.log(r); // -10


    const r = Math.max(-78, -20, -10, 0) 
    console.log(r); // 0


    const r = Math.max(-78, -20, -10, 0, 15) 
    console.log(r); // 15
  • Где найти задачи по JS от простого к сложному?

    lastuniverse
    @lastuniverse
    Alexandroppolus, ну тут вы явно сгущаете краски. В любом случае разобрав такой ответ можно узнать для себя что то новое об оптимизации алгоритмов/вычислений

    Ну и что-то я не вижу в ответах альтернатив codewars-у. Так что ваш коммент всего лишь не конструктивная придирка)
  • Где найти задачи по JS от простого к сложному?

    lastuniverse
    @lastuniverse
    WbICHA, ну для того чтобы это увидеть нужно сначала написать свое)
  • Как подключить скрипт к фронту?

    lastuniverse
    @lastuniverse
    nonconformiste, это делается не в коде сервера.
  • Как работает данная строчка кода?

    lastuniverse
    @lastuniverse
    AlexeySmk, отметьте решением ответ Rsa97, ведь он сразу показал суть проблемы
  • Как работает данная строчка кода?

    lastuniverse
    @lastuniverse
    AlexeySmk, в общем ничего не пишите в ответ. Я рассписал вам все до запятой и уже не вернусь сюда к вам в обсуждения))) Читайте то что написал вам в предыдущем комменте и разбирайтесь с этим самостоятельно
  • Как работает данная строчка кода?

    lastuniverse
    @lastuniverse
    смотрите сами:

    let ball = document.querySelector("#ball");
    ball - html элемент со своими top,left,width,height

    let field = document.querySelector("#field");
    ...
    let fieldCoords = field.getBoundingClientRect();

    field - html элемент со своими top,left,width,height
    fieldCoords - размер этого элемента и его позицию относительно viewport (часть страницы, показанная на экране, и которую мы видим).

    let ballCoords = {
        top: event.clientY - fieldCoords.top - field.clientTop - ball.clientHeight/2,
        left: event.clientX - fieldCoords.left - field.clientLeft - ball.clientWidth/2
    }

    ballCoords - переменная с координатами top и left. Рассмотрим как они подсчитываются на примере ballCoords.top

    ballCoords.top =
    event.clientY - расстояние от верхней границы экрана до курсора без учета прокрутки
    - fieldCoords.top - минус отстояние поля от верхней границы экрана
    - field.clientTop - минус Толщина верхней границы поля в пикселях
    !!! на данном этапе у нас в топ лежит расстояние от верхней границы футбольного поля до курсора
    - ball.clientHeight/2 - минус пол высоты мяча
    !!! ТАДАМ !!! и мы получаем такую координату для верхней границы мяча, что центр мяча окажется в той точке в которую кликнули мышкой

    if(ballCoords.top + ball.clientHeight > field.clientHeight) {
        ballCoords.top = field.clientHeight - ball.clientHeight;


    ballCoords.top + ball.clientHeight это относительная координата нижней границы мяча (относительная потому что отсчитана от верхней границы поля)
    Как результат условие можно прочесть так: если нижняя граница мяча ниже нижней границы поля, то мяч вышел за границы поля и его координаты надо подправить. Что и делается в этой строчке
    ballCoords.top = field.clientHeight - ball.clientHeight;


    ball.style.top = ballCoords.top + "px";
    Ну а тут у мяча мы выставляем посчитанную координату верхней границы
  • Как изменить сообщение отправленное телеграм ботом?

    lastuniverse
    @lastuniverse
    Neolq, действительно. обманул вас немного. дайте 10 минут, вспомню - отпишусь
  • Как работает данная строчка кода?

    lastuniverse
    @lastuniverse
    AlexeySmk, нет не сдвигает в центр. Она сдвигает центр мяча так, чтобы он попал на координаты клика. Таким образом ballCoords.top - координата верхнего края мяча
  • Как изменить сообщение отправленное телеграм ботом?

    lastuniverse
    @lastuniverse
    замените это
    bot.editMessageText(`${message} (edit)`, {
                   chat_id = chatId,
                   
                })


    на это
    bot.editMessageText(`${message} (edit)`, {
       chat_id: msg.chat.id,
       message_id: msg.message_id
    });
  • Как изменить сообщение отправленное телеграм ботом?

    lastuniverse
    @lastuniverse
    Neolq, вижу вы поменяли формулировку. Что же, давайте разберем ваш вопрос по полочкам.

    Бот на node-telegram-bot-api.

    Отлично выражена мысль, коротко, лаконично, есть вся нужная инфа (без сарказма)

    Нужно изменить сообщение, отправленное телеграм ботом. Как это реализовать?

    А вот тут я в ступоре. Посудите сами:
    1. Бот написан вами?
    2. Сообщения отправляемые ботом написаны вами (в коде бота)?
    3. Что мешает вам написать другое сообщение вместо неугодного?

    Что, речь в вопросе не об этом? Хмм а я был уверен что об этом)))
  • Как изменить сообщение отправленное телеграм ботом?

    lastuniverse
    @lastuniverse
    Neolq, со сломанным мозгом точно не смогу, так что впредь будьте более точны в формулировках, чтобы не ломать мозг тем, кто скорее всего смог бы вам помочь.
  • Как изменить сообщение отправленное телеграм ботом?

    lastuniverse
    @lastuniverse
    Мне нужно передать параметры в editMessageText - id сообщения бота.


    Вот эта формулировка сломала мне мозг)
  • Как правильно написать коллбек с обработкой ошибки?

    lastuniverse
    @lastuniverse
    rd100, есть еще вот такая штука, https://nodejs.org/dist./v0.8.18/docs/api/domain.h.... Обратите как используется domain.intercept(), но по факту там под капотом все тоже самое. Я допускаю что в ноде есть какие то механики перехвата ошибок путем подмены контекста или чего то в таком же духе, но мне такие способы неизвестны, а об известных я уже рассказал все что знал.
  • Как правильно написать коллбек с обработкой ошибки?

    lastuniverse
    @lastuniverse
    так, а где происходит инициализация ошибки?

    rd100, так этот вопрос я вам и задаю все то время, что мы тут общаемся, и пока вы не дадите на него ответ, мы так и будем гадать на кофейной гуще

    Но все-же я думаю что тут нет никакого волшебства, и в примере просто либо передается перехваченная выше ошибка, либо не передается

    // вызов с ошибкой
    setTimeout(func.bind(null, new Error('error'), 'hello world', (err, data) => {
      if(err){
           console.log('ошибка', err);
      }else{
           console.log('данные', data);
      }
    }), 2000);
    
    // вызов без ошибки
    setTimeout(func.bind(null, null, 'hello world', (err, data) => {
      if(err){
           console.log('ошибка', err);
      }else{
           console.log('данные', data);
      }
    }), 4000);


    в первом случае идет вызов с ошибкой, если она была (поймали ее с помощью try/catch или получили от одной из вызываемых функций или сгенерировали по результатам обработки каких либо данных с помощью new Error. Во втором случае вызываем ее без ошибки. Веди менно так и поступают в примерах с гитхаба, что я скинул выше.
  • Как заставить что-то написать моего телеграм бота в мой тг-чат?

    lastuniverse
    @lastuniverse
    Зачем это мне: Чтоб имея диалог бота с чатом получить id диалога. А зная токен бота я уже могу писать через бота сообщения в чат моим софтом.


    Бред какой то

    Зарегистрировал в Botfather тг-бота получил токен бота

    тем более что токен у вас уже есть

    И вот еще, подумайте над вопросом, почему миллионы школоботов, спамботов, рекламоботов не пишут вам в личку сообщения каждые несколько миллисекунд? Наверное потому что не могут до тех пор пока вы сами ему не напишите?
  • Как правильно написать коллбек с обработкой ошибки?

    lastuniverse
    @lastuniverse
    rd100, давай глянем модули ноды. Вот ее репозиторий на гитхабе https://github.com/nodejs/node/blob/master

    открываю любой js файл, например этот https://github.com/nodejs/node/blob/master/lib/_ht... , и вижу

    311-327 строчки

    const oncreate = once((err, socket) => {
            if (err) {
              process.nextTick(() => this.emit('error', err));
            } else {
              this.onSocket(socket);
            }
          });
    
          try {
            const newSocket = optsWithoutSignal.createConnection(optsWithoutSignal,
                                                                 oncreate);
            if (newSocket) {
              oncreate(null, newSocket);
            }
          } catch (err) {
            oncreate(err);
          }


    что есть обычный try/catch

    или вот в этом файле https://github.com/nodejs/node/blob/master/lib/int... строчки 46-54
    getConnections(callback) {
        this._request({
          cmd: 'NODE_SOCKET_GET_COUNT',
          key: this.key
        }, 'NODE_SOCKET_COUNT', false, (err, msg) => {
          if (err) return callback(err);
          callback(null, msg.count);
        });
      }

    тут вообще классика, eсли метод this._request(...) отработал с ошибкой - то ошибка просто пробрасывается в коллбэк

    в других модулях встречаются подобные варианты только с promise.then().catch() но суть от этого не меняется. По факту везде либо ошибка перехватывается с помощью try/catch или promise.then().catch() либо генерится с помощью new error, либо прокидывается/возвращается при вызове различных методов/функций сторонних модулей, но во всех случаях отдается (либо не отдается если не было ошибки) в коллбэк. Если исходить из данной логики, то все у вас верно, разве что саму функцию чуть подправить.

    Примерно так

    function func(err, data, cb) {
      if(!err) {
        cb(null, data);
      } else {
        cb(err, data);
      }
    }
    
    
    // вызов с ошибкой
    setTimeout(func.bind(null, new Error('error'), 'hello world', (err, data) => {
      if(err){
           console.log('ошибка', err);
      }else{
           console.log('данные', data);
      }
    }), 2000);
    
    // вызов без ошибки
    setTimeout(func.bind(null, null, 'hello world', (err, data) => {
      if(err){
           console.log('ошибка', err);
      }else{
           console.log('данные', data);
      }
    }), 4000);