• Где найти задачи по JS от простого к сложному?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    https://www.codewars.com/dashboard

    самые простые - 8q
    самые сложные - 1q

    ЗЫ: самое классное в codewars то, что решив задачу и опубликовав решение вам становятся доступны к просмотру решения данной задачи от других участников, и зачастую эти решения не такие как ваше. Разобрав их - вы узнаете много нового для себя))))
    Ответ написан
    6 комментариев
  • Как изменить сообщение отправленное телеграм ботом?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    bot.on('message', async (msg) => {
      const text = msg.text.toLowerCase()
      const chatId = msg.chat.id
      const message = 'TEXT'
      if (text.match('123')) {
         setTimeout(() => {
            bot.sendMessage(chatId, message)
            .then(msgData=>{
              let count = 0;
              const timerId = setInterval(() => {
                  count+=Math.floor(Math.random()*10);
                  if(count>100){
                    count=100;
                    clearInterval(timerId);
                  }
                  bot.editMessageText(`${message} (edit) ${count}%`, 
                  {
                    chat_id: msgData.chat.id,
                    message_id: msgData.message_id
                  });
              }, 500)
            })
         }, 500)
      }
    })
    Ответ написан
  • Почему после читки файла, строки выводятся криво?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    в фале proxy.txt
    Moscow:
    
    91.243.188.184
    91.243.188.114
    91.243.188.30
    91.243.188.137
    
    SPB:
    
    109.120.128.178
    109.120.128.179
    109.120.128.180
    
    New IP Moscow:
    
    83.166.240.184
    83.166.241.9
    83.166.241.120
    
    
    port: 7951
    
    login/pas: In the account https://www.oplata.info/info/delivery.asp


    код парсера данного файла:
    const filedata = fs.readFileSync('proxy.txt', 'utf-8');
    
    const proxyData = filedata.split(/\s*?\n+\s*/).reduce(
      (acc, line)=>{	
        if( /\w+:$/.test(line)){
          acc.location = line;
        }else if( /port:\s*\d+/.test(line)){
          acc.port = line.replace(/\D+/g,'');
        }else if( /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/.test(line)){
          acc.list.push({
            ip: line,
            location: acc.location      	
          });
        }
        return acc;
      },
      {
        list:[],
        location: undefined,
        port: undefined
      }
    );
    
    const targetProxy = proxyData.list.map(item => item.ip + ':' + proxyData.port);
    
    console.log(targetProxy)
    
    // 91.243.188.184:7951
    // 91.243.188.114:7951
    // 91.243.188.30:7951
    // 91.243.188.137:7951
    // 109.120.128.178:7951
    // 109.120.128.179:7951
    // 109.120.128.180:7951
    // 83.166.240.184:7951
    // 83.166.241.9:7951
    // 83.166.241.120:7951


    тест на jsfiddle
    Ответ написан
    1 комментарий
  • Как добиться 3d эффекта?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    5 комментариев
  • Почему при клике на кнопку выводится NaN?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    потому что handleClick теряет свой контекст. Решается так:

    buton.addEventListener("click", ()=>cls.handleClick());


    или так

    buton.addEventListener("click", cls.handleClick.bind(cls));
    Ответ написан
    Комментировать
  • Как изменить такой парсер JSON?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    names = appData.filter(function (x) { return skipped.indexOf(x) < 0; })
    get("https://serv.io/set?" + names.join("|")).then(function (data) {
        result = JSON.parse(data);
        
        Object.entries(result).forEach(([name,{act, total}])=>{
            console.log(name,act,total) // переменные name,act,total тут локальны, но сами уже разберетесь
        });


    вот пример на jsfiddle https://jsfiddle.net/tfxe4q51/
    Ответ написан
    6 комментариев
  • Как можно решить эту задачу?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    воспользоваться регулярным выражением типа

    function validatePIN (pin) {
       return (/^!!!$/).test(pin);
    }

    где вместо !!! вставить условее проверки на 4 или 6 цифр

    полное решение

    function validatePIN (pin) {
       return (/^(\d{4}|\d{6})$/).test(pin);
    }


    Ответ написан
    Комментировать
  • Как правильно реализовать событие onmousemove с style.transform?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Сумел восстановить код, вам немного повезло.
    Вот пример, а как сделать из него глаза - это уже сами

    https://codepen.io/lastuniverse/pen/VwbNeVq


    ЗЫ: Пример слегка переусложнен, но зато он включает в себя базовые обязательные моменты для анимации
    Ответ написан
    3 комментария
  • Как читать документацию по node.js?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    на официальномй сайте, проматываю чуть ниже и вижу

    fs.writeFile(file, data[, options], callback)#
    History:
    • file <string> | <Buffer> | <URL> | <integer> filename or file descriptor
    • data
      <string> | <Buffer> | <TypedArray> | <DataView> | <Object>

    • options <Object> | <string>
      • encoding <string> | <null> Default: 'utf8'
      • mode <integer> Default: 0o666
      • flag <string> See support of file system flags. Default: 'w'.
      • signal <AbortSignal> allows aborting an in-progress writeFile

    • callback <Function>
      • err <Error> | <AggregateError>



    When file is a filename, asynchronously writes data to the file, replacing the file if it already exists. data can be a string or a buffer.

    When file is a file descriptor, the behavior is similar to calling fs.write() directly (which is recommended). See the notes below on using a file descriptor.

    The encoding option is ignored if data is a buffer.

    If data is a plain object, it must have an own (not inherited) toString function property.
    ...


    откуда следует что:
    первый параметр - это имя файла который нужно создать,
    второй параметр - это данные которые нужно записать,
    третий (необязательный) - это объект с опциями
    а четвертый (или третий если предыдущий параметр не был указан) - это коллбэк

    ЗЫ: уважаемый ТС, я понимаю что вопрос скорее всего был задан из-за вашей невнимательности, но тем не менее ответ вы получили, отметьте его решением)))

    Вот вам способ быстро найти информацию на странице:
    - открыв нужную страницу с большим объемом текста, перемотайте страницу в начала (до оглавления) и затем нажмите комбинацию кнопок CTRL+F (поиск по тексту страницы) и в появившемся окошке вбивайте искомый текст (в данном случае fs.write). После этого нужные пункты оглавления подсветятся желтым и вы легко найдете нужный.
    Ответ написан
    12 комментариев
  • Почему не получается получить значение value?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    сравните

    class="input-in"
    и
    document.querySelector(".input-it")

    и будьте внимательней
    Ответ написан
    2 комментария
  • Откуда такая проблема?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Судя по картинке вы намеренно или случайно создали дубли полигонов вашего меча. Чтобы это исправить более менее автоматизированно - попробуйте следующее:

    1. выделить меч
    2. перейти в режим редактирования
    3. перейти в режим вершин
    4. выделить все вершины
    5. ПКМ в окно редактирования и выбрать Merge Vertices -> by distance.
    6. В нижнем левом углу окна редактирования появится элемент управления Merge by distance (как на картинке), в нем поиграйте параметром Merge distance. Чем больше этот параметр, тем более далекие друг от друга точки будут объеденены в одну.

    610962a637849337968163.png

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

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    gogle chrome -> F12 -> а затем как на картинке
    6105d6a3a64e3799731104.png

    Если же хочется автоматизации, то качаете утилиту wget и затем с ее помощью качаете сайт целиком. Для этого используете команду:
    wget -r -k -l 7 -p -E -nc https://wooordhunt.ru/
    после выполнения которой (скачка займет весьма много времени) у вас будет локальная копия сайта в папке wooordhunt.ru. А в папке wooordhunt.ru/data/sound/ будет лежать озвучка всех слов встречающихся на сайте
    Ответ написан
    7 комментариев
  • Как писать диапазон времени?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    есть что то похожее на то что вы ищите Datejs
    Ответ написан
    Комментировать
  • Как переписать код, чтобы получить результат без использования цикла?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    const offers = [];
    
    data.every(item=>{
        const result = filters.every(filter => filter.value === DEFAULT_VALUE ? true : FilterRules[filter.id](item, filter));
        if (result) offers.push(item);
        return offers.length < 10;
    
    })
    Ответ написан
    Комментировать
  • Каким образом можно добавить корзину покупателя на сайт интернет-магазина, чтобы при нажатии на кнопку «Купить» высвечивалась корзина с товаром?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Подсказываю)))
    Есть ровно 2 принципиально отличающихся варианта:
    1. Хранить данные о добавленных в корзину товарах на сервере
    2. Хранить данные о добавленных в корзину товарах на клиенте

    Если ваш интернет магазин принуждает пользователя авторизоваться то вам желательно реализовать первый вариант. Если же магазин никак не привязывается к пользователю (отсутствует любой вид авторизации, данные пользователей не хранятся на сервере) то вариант 2 для вас будет самое то.

    И так, вот описательные примеры возможной реализации обоих вариантов:

    1 вариант:
    • на клиенте, при нажатии у любого товара кнопки [добавить в корзину] отправляем AJAX-ом на сервер информацию об этом товаре
    • на сервере получив такой запрос запоминаем в данных пользователя соответсвующих его корзине эту информацию (добавив ее к уже имеющейся)
    • на клиенте, при нажатии кнопки [посмотреть корзину] отправляем AJAX-ом на сервер запрос на все данные из корзины пользователя
    • на сервере получив такой запрос достаете из данных пользователя всю информацию о добавленных товарах и отправляете в ответ на запрос
    • на клиенте, получив такой ответ формируете окно(страницу) в котором эти данные отображаете в удобном для пользователя виде
    • и т.д. и т.п.


    2 вариант:
    • на клиенте, при нажатии у любого товара кнопки [добавить в корзину] записываем в lacalstogage информацию об этом товаре
    • на клиенте, при нажатии кнопки [посмотреть корзину] берем из lacalstogage все данные о товарах уже добавленных в корзину и формируем из них окно(страницу) в котором эти данные отображаете в удобном для пользователя виде
    • и т.д. и т.п.
    Ответ написан
  • Как сделать загрузку картинки с сайта JS?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Ответ написан
    Комментировать
  • Как сделать текст по спирали на канвасе?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    просто накидал пример. Думаю посмотрев его вы сможете внести нужные правки в ваш код.

    спираль закручена против часовой стрелки


    спираль закручена по часовой стрелки

    Ответ написан
    Комментировать
  • Почему не удаляются EventListener у данного кода?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    потому что
    this.mouseOverStar.bind(this) не равно this.mouseOverStar.bind(this) и неравно this.mouseOverStar

    Если сомневаетесь
    попробуйте выполнить следующий код и посмотрите вывод в коноль
    function test(){
       console.log("test");
    }
    
    
    // проверим
    console.log(test===test.bind(this));  // false
    console.log(test.bind(this)===test.bind(this));  //false
    
    
    // а как тогда?
    const test_bind = test.bind(this);
    console.log(test===test);  // true
    console.log(test_bind===test_bind);  //true
    Ответ написан
    6 комментариев
  • Почему не срабатывает слушатель событий?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    <script src="assets/js/listeners.js" defer></script>
    <script src="assets/js/ajax_popup.js" defer></script>


    Сори, обманул вас. Просто для установки слушателей используйте addEventListener, но и параметр defer у скриптов оставьте, лишним не будет)

    document.querySelector('.notification').addEventListener("click", e => {
        send_request(e);
    }, false);

    document.querySelector('.event__button span').addEventListener("click", hide_popup, false);
    document.querySelector('.popup__close').addEventListener("click", hide_popup, false);


    ну и обратите внимание, что в представленном html коде нет следующих элементов, на которые вы пытаетесь повесить обработчики:
    - элемента span с классом .event__button
    - элемента с классом .notification
    Возможно они у вас остались гдето за рамками представленного html кода.
    Ответ написан
  • Как избавиться от эффекта рыбьего глаза?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    5fe9fe587564d777784861.png

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

    Чтобы это исправить вместо данного расстояния вам надо использовать расстояние от точки пересечения до перпендикуляра к направлению взгляда.
    Смотрите сноску в верхнем правом углу на рисунке.
    Где:
    A - камера
    B - точка пересечения луча с преградой
    Ось Y - направление взгляда
    Ось X - перпендикуляр к направлению взгляда
    α - угол между текущим лучем и осью x
    R - расстояние от камеры до точки пересечения луча с преградой
    l - расстояние от точки пересечения луча с преградой до перпендикуляра к направлению взгляда

    Вот пример https://jsfiddle.net/lastuniverse/0t1jo8cr/4/ , в нем есть некоторые искажения, возникающие из-за неправильного расчета length. Дело в том, что ваш алгоритм не находит точные координаты пересечения луча с гранью блока, а находит некую точку внутри блока, что так же добавляет искажения.

    Вот еще вариант https://jsfiddle.net/lastuniverse/6nrsL28g/8/ (переделал из ответа на вопрос Почему данный код работает неправильно? от товарища twobomb ). В нем эффект рыбьего глаза полностью нивелирован (смотрите функцию drawGame(...) ). Как бонус - данный пример работает в несколько десятков раз быстрее, и позволяет ставить блоки нестандартного размера)))

    5fea7f268ea1d386247037.png
    Ответ написан