• Где взять комментарии для сайта?

    lastuniverse
    @lastuniverse
    Steppp, такие биржы называются "буксы"
  • Есть ли библа/плагин JS для формирования из таблицы excel?

    lastuniverse
    @lastuniverse
    сохраните данную станицу с таблицей как HTML-ку и просто откройте ее в excel-е
  • Как передать много текста на страницу и сохранить его в файл?

    lastuniverse
    @lastuniverse
    Александр Интересный, нет не так, в ссылке передается инфа при GET запросе и там действительно есть ограничение на объем, а вот POST / PUT запросы засунут инфу в тело запроса, и тут уже таких жестких ограничений нет
  • Как изменить переменную при resize на чистом JS?

    lastuniverse
    @lastuniverse
    WbICHA, даже если компы будут в 100500 раз быстрее, мы все равно сможем их подвешивать своим Г-кодом)))
  • Как реализовать таймер?

    lastuniverse
    @lastuniverse
    и больше в запускаемом файле кода нет?
  • Как реализовать таймер?

    lastuniverse
    @lastuniverse
    Данил Самусев, код который вы показали это не тот код который вы запускаете в nodejs!!!
    В nodejs нет функции alert();

    так что покажите тот код, который вы запускаете в nodejs и будем разбираться
  • Как реализовать такое?

    lastuniverse
    @lastuniverse
    Роми, уважаемый, все я понял, но вопрос был именно про анимацию:

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


    Так что в рамках вопроса вебсокет не обязателен)

    Если же говорить о рулетке как игре, то да, websocket-ы желательны, НО не для синхронизации анимации. Вот как примерно должен выглядеть обмен данными между клиентами и сервером (в случае мулитплеерного варианта игры).

    1. загрузка игры (html, css, js, картинок и прочего). Это дело осуществляется по протоколу http/https
    2. подключение к комнате/столу. Тут можно и по http/https (long-polling) и по websocket-у. Я бы вбрал одну из библиотек, которая умеет оба варианта в зависимости от возможностей клиента. Например тот же Socket.IO
    3. после выше описанных действий сам процесс игры требовал бы только следующий обмен данными:
    3.1. Доведение до участников стола о садящихся(подключающихся) за стол игроках и встающих (отключающихся). данный пункт через Socket.IO
    3.2. Доведение до участников стола о разрешении делать ставки. данный пункт через Socket.IO
    3.3. Доведение до участников стола о сделанных другими участниками ставках. данный пункт через Socket.IO. Так же в данном пункте разово передается информация для синхронизации момента старта рулетки.
    3.3. Доведение до участников стола о запуске рулетки (броске шарика). данный пункт через Socket.IO.
    Клиенты получая данную информацию запускают анимацию вращения рулетки и шарика. При этом скорость вращения и того и другого а также стартовую позицию шарика можно как получить от сервера, так и от ГПСЧ (вместо всех этих данных передается seed или стартовый индекс для ГПСЧ, а сами данные получаются уже от самой ГПСЧ как псевдослучайная величина). Оба варианта позволят сделать это синхронно, но вариант с ГПСЧ снизит нагрузку на сервер, что позволит серверу обслуживать большее число клиентов на тех же серверных мощностях. Дальнейшие пункты расписываю для варианта с ГПСЧ.
    3.4. Доведение до участников стола о завершении приема ставок. данный пункт через Socket.IO.
    в данном пункте так же передается seed или стартовое значение индекса для ГПСЧ, на основе которого от ГПСЧ клиенты получают информацию о времени вращения рулетки и шарика до остановки и информацию о конечном положении шарика. Клиенты обладая этой информацией синхронно рисуют анимацию процесса.

    Вкратце про ГПСЧ:
    - ГПСЧ - генератор псевдослучайных чисел
    - При инициализации одним и тем же seed-ом будет выдавать одну и туже последовательность случайных чисел
    - Многие реализации при инициализации одним и тем же seed-ом и запуске метода получения случайного числа с одним и тем же аргументов дадут одно и тоже случайное число. Это позволяет передав на разные клиенты одни и те же seed-ы и/или стартовые индексы добиться на клиентах идентичных псевдослучайных значений, управляющих анимацией вращения рулетки и шарика

    Вкратце про профит казино:
    Выдавая клиентам специально подобранные seed-ы и/или стартовые индексы мы добиваемся выпадения на них нужных результатов спина. То есть, когда ставки сделаны и сервер выдает клиентам информацию о seed-ах и/или стартовых индексах (пункт 3.4), они подобранны сервером таким образом, чтобы результат спина обеспечил в первую очередь выигрыш казино. По факту скажу что в данном варианте крупье всегда мухлюет, но все онлайн казино устроены ровно так же, а степень мухлежа (процент от всех ставок со всех игр, который в конечном итоге станет доходом казино) зависит только от честности тех кто это казино делал.
  • Как реализовать такое?

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

    lastuniverse
    @lastuniverse
    Дмитрий Беляев, можно и так, суть от этого не меняется, все клиенты получат точку отсчета времени и смогут рисовать синхронно.
  • Как реализовать такое?

    lastuniverse
    @lastuniverse
    Для такой синхронизации не нужен websocket, для нее нужно лишь иметь на клиентах точное время.
  • Почему выпадает ошибка и как ее исправить?

    lastuniverse
    @lastuniverse
    Webstudent31, я почти уверен что ошибка не в коде валидатора, и чтобы это проверить попробуйте сделать так

    export class FormValidator {
        constructor(config, formElement) {
          this._config = config;
          this._formElement = formElement;
          this._inputList = Array.from(this._formElement.querySelectorAll(this._config.inputSelector));
          this._buttonElement = this._formElement.querySelector(this._config.submitButtonSelector);
    
          // проверяем входные данные
         this._inputList.forEach((v,i)=>{
             if(v === null)  console.log('!!!!',  i)
         })
         
        }


    и если в консоль уппадет сообщение типа "!!!! номер" то я прав и ошибка где-то в коде за пределами валидатора
  • Почему выпадает ошибка и как ее исправить?

    lastuniverse
    @lastuniverse
    Webstudent31, нет, вам нужно засунуть на кодепен какую нибудь простую форму и прикрутить к ней валидатор таким образом чтобы сохранилась ошибка.
  • Почему выпадает ошибка и как ее исправить?

    lastuniverse
    @lastuniverse
    Webstudent31, еще раз повторюсь, сделайте на codepen пример, воспроизводящий данную ошибку и тогда я смогу вам помочь
  • Почему выпадает ошибка и как ее исправить?

    lastuniverse
    @lastuniverse
    Webstudent31, дебажить собранный webpack-ом без source.map файла код? Как нибудь сами)))

    а так, судя по стактрейсу
    main.js:1 Uncaught TypeError: Cannot read properties of null (reading 'classList')
        at e.value (main.js:1)
        at main.js:1
        at Array.forEach (<anonymous>)
        at e.value (main.js:1)
        at HTMLElement.<anonymous> (main.js:1)


    у вас в массив this._inputList каким то образом затесался элемент null
    removeValidationErrors(){
          this._inputList.forEach((itemElement) => {
            // один из itemElement тут равен null
            this._hideInputError(itemElement)
          });
        }
  • Как в NodeJS создать несколько консолей?

    lastuniverse
    @lastuniverse
    а чем вас не устраивают существующие ssh клиенты?
  • Почему выпадает ошибка и как ее исправить?

    lastuniverse
    @lastuniverse
    _hideInputError(inputElement) {  
            const errorElement = this._formElement.querySelector(`.${inputElement.id}-error`);  
            inputElement.classList.remove(this._config.inputErrorClass);  // ругается на эту строчку
            ...


    а сама ошибка говорит о том, что inputElement у вас равен null. Для того чтобы узнать почему так выходит нужно смотреть рабочий код, а не тот огрызок, что вы показали на codepen. Потрудитесь прикрутить на codepen валидатор к html коду так, чтобы мы могли увидеть вашу ошибку, тогда и ответ появится быстрее
  • Как добавить текст и картинку в inline режим (aiogram)?

    lastuniverse
    @lastuniverse
    yasegor, зависит от того на чем написан сайт.
  • Рандомное выпадение монетки на js?

    lastuniverse
    @lastuniverse
    Aleksandr-JS-Developer, видел англоязычную статью, но к сожалению сейчас не нашел. Так что остается только исходники ковырять.

    ChakraCore (мелкомягкие)
    v8 (google)
    gecko (firefox)
    spidermonkey (firefox)
    rhino (firefox)
    nodejs - этот хоть и имеет под капотом V8, но пишут что реализация Math.random() в нем другая (лично этот факт не проверял)
  • Как изменить сообщение отправленное телеграм ботом?

    lastuniverse
    @lastuniverse
    Sergey Morgovsky, привязку к chatID я убрал, сами ее добавите.
    const cuefaHash = {
      'stone': ['scissors', 'lizard'], 
      'scissors': ['paper', 'lizard'], 
      'paper': ['stone', 'spock'], 
      'lizard': ['paper', 'spock'], 
      'spock': ['stone', 'scissors'], 
    };
    
    const helper = {
      random(hash) {
        const array = Object.keys(hash);
        return array[Math.floor(Math.random() * array.length)];
      },
      compare(item1, item2) {
        if(cuefaHash[item1].includes(item2)) return 'Я ПОБЕДИЛ!!!';
        if(cuefaHash[item2].includes(item1)) return 'ВЫ ПОБЕДИЛИ !!!';
        return 'НИЧЬЯ !!!';
      }
    
    };
    
    
    
    
    bot.onText(/(.+)/, function (msg, match) {
      console.log('===========================\n', msg,'\n----------------------------\n');
      const opts = {
        reply_markup: {
          inline_keyboard: [
            [{text: 'startCuefa', callback_data: 'startCuefa'}],
          ]
        }
      };
    
      bot.sendMessage(msg.from.id, 'Original Text', opts);
    });
    
    bot.on('callback_query', async (query) => {
      
      const data = query.data
    
      if (data === 'startCuefa') {
    
        await bot.editMessageText(
          'Что выбираете?',
          {
            chat_id: query.message.chat.id,
            message_id: query.message.message_id
          }
        );    
        await bot.editMessageReplyMarkup(
          {
            inline_keyboard: [
              Object.keys(cuefaHash).map(item=>({text: item, callback_data: item}))
            ],
          },
          {
            chat_id: query.message.chat.id,
            message_id: query.message.message_id
          }
        );    
    
      } else {
        const botSelect = helper.random(cuefaHash);
    
        const text =  helper.compare(botSelect, data)
        await bot.editMessageText(
          `Я выбрал ${botSelect}, вы выбрали ${data}, ${text}\n сыграем еще раз?`,
          {
            chat_id: query.message.chat.id,
            message_id: query.message.message_id
          }
        );         
        await bot.editMessageReplyMarkup(
          {
            inline_keyboard: [
              [{text: 'startCuefa', callback_data: 'startCuefa'}],
            ]
          },
          {
            chat_id: query.message.chat.id,
            message_id: query.message.message_id
          }
        ); 
       
      }
    });