• Как при движении ползунка у input range синхронно сдвигать другой элемент?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Просто не изменяйте координату Y.

    PS: более детальный ответ смогу дать если вы дадите ваш код, а еще лучше разместите ваш пример на jsfiddle или codepen.

    PPS: ловите рабочий вариант.
    Ответ написан
  • Где ошибка в switch case?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Оператор case не аналог оператора if, он не умеет обрабатывать условия, а сравнивает переменную с фиксированным значением.

    https://learn.javascript.ru/switch

    switch (num) {
        // никогда не сработает потому что если num>60 то будет сравнивать num c true если мешьше 60 то с false
        case num > 60:
             console.log("Нет, переменная меньше 60");
             break;
    
    // никогда не сработает потому что если num<40 то будет сравнивать num c true если бльше 40 то с false
        case num < 40:
             console.log("Нет, переменная больше 40");
             break;
    
    // никогда не сработает потому что если num=50 то будет сравнивать num c true
        case num == 50:
             console.log("Да, переменная ровна 50");
             break;
    }


    Наглядная демонстрация:
    5cc06e799102a203388819.jpeg
    Ответ написан
  • Как вырезать нужное из строки с помощью regex?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    var query = "filter[last_modified][at]=YYYYMMDD";
    var result = query.match(/^filter\[(.+?)\](\[(.+?)\])?/);
    if( result && result[1] )
       console.log("profit!", result[1], result[3]);
    Ответ написан
    2 комментария
  • Как запустить приложение на разных субдоменах?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Думаю самым простым и правильным решением будет разруливать субдомены и соответственно висящие на них приложения через nginx.

    Вы сможете запускать свои приложения как на одном хосте и даже в одном докер контейнере (на разных портах) так и на разных хостах и перенаправлять входящие по 80 порту запросы на ваши приложения по признаку субдомена. Так же вы сможете получив один сертификат выписанный для основного домена и субдоменов и подключив его через nginx, вы получите https не заморачиваясь настройкой и подключением сертификатов непосредственно в коде ваших приложений. Так же вы получите удобный инструмент балансировки нагрузки между вашими субдоменами и много других плюшек.
    Ответ написан
    Комментировать
  • Как из браузера сохранить текстовый файл?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Уважаемые Роман Мирр, Руслан Лопатин, не обманывайте людей:)))

    вот живая демонстрация:


    PS: реально несколько костыльный прием))) и открывает много неприятных возможностей для различных злыдней.
    Идея и реализация честно скоммунизжена из исходного кода frontend фреймворка webix
    Ответ написан
    3 комментария
  • Как добавить произвольные ключи в объект localStorage?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Вы пишете:

    Нужно в localStorage хранить не только значения, но и ключи
    Примерно вот так:
    0: {
     id: id,
     p: текст параграфа
    },



    при этом у вас:

    <p><input class="check" id="check-option-1" name="name" type="checkbox">
      <label for="check-option-1"></label>
      </p>
      <p class="copy">1</p>
      <p class="copy-2">1.1</p>


    объясние, откуда должен взяться id, из какого именно элемента p долже браться текст?
    Ответ написан
    124 комментария
  • Вопрос по html?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Да, можете. Решение сильно зависит от используемого веб сервера. Например, если вы используете node.js с express.js то вы можете в роутере или обработчике смотреть запрос, и если он заканчивается на /site определять нужный файл по остальной части пути и отдавать его в ответ на запрос. Но должен вас предупредить, что такое решение не является нормальной практикой, и в последствии может создать ряд проблем.
    Ответ написан
    1 комментарий
  • Как сделать такую регулярку?

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

    PS: в качестве саморекламы)
    Ответ написан
    Комментировать
  • Преобразование угла (0-360) в точки x1,y1,x2,y2 и обратно?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Исправил под Вашу ситуацию

    // получаем угол в радианах
    var angle = Math.atan2((x1*100/obj.width)-50,(y1*100/obj.height)-50); 
    
    // или в градусах
    var angle = 180*Math.atan2((x1*100/obj.width)-50,(y1*100/obj.height)-50)/Math.PI;


    PS: немного теории на примерах

    преобразование декартовых координат в полярные
    есть некая точка, заданная координатами x,y в декартовой системе координат. для вычисления ее полярных координат используем формулы
    // угол между осью X и отрезком, заданным координатами (0,0)-(x,y)
    var angle = Math.atan2(x,y); // в радианах
    var angle = 180*Math.atan2(x,y)/Math.PI; // в градусах
    
    // длинна отрезка (сежду точкми 0,0 и x,y)
    var radius = Math.sqrt( Math.pow(x, 2) + Math.pow(y, 2) );


    преобразование полярных координат в декартовы
    есть некая точка, заданная координатами angle, radius в полярной системе координат. для вычисления ее декартовых координат используем формулы
    // угол angle задан в радианах
    var x = radius*Math.cos(angle); 
    var y = radius*Math.sin(angle);


    векторные преобразования (самая малость)
    вариант 1. есть некий отрезок (вектор) заданный декартовыми координатами точек (начала и конца) x1,y1 и x2,y2 соответственно.
    // угол между осью X и отрезком, заданным координатами (x1,y1)-(x2,y2), он же направление вектора.
    var angle = Math.atan2(x2-x1,y2-y1); // в радианах
    var angle = 180*Math.atan2(x2-x1,y2-y1)/Math.PI; // в градусах
    
    // длинна отрезка, заданного координатами (x1,y1)-(x2,y2), он же длина (размер) вектора
    var radius = Math.sqrt( Math.pow(x2-x1, 2) + Math.pow(y2-y1, 2) );


    вариант 2. есть некий отрезок (вектор) заданный декартовыми координатами точки (начала) x1,y1 и полярными координатами точки конца - angle и radius, указывающими направление отрезка и его длинну, относительно точки начала x1,y1.
    // находим декартовы координаты точки конца. угол angle задан в радианах
    var x2 = x1+radius*Math.cos(angle); 
    var y2 = y1+radius*Math.sin(angle);
    Ответ написан
    23 комментария
  • Как сделать свою обёртку fs?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    const fs = require('fs');
    
    ...
    
    exports.readdir = fs.readdir;
    Ответ написан
    Комментировать
  • Каков алгоритм решения задачи о жуках, которые не любят находиться близко друг от друга?

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

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    вы можете сделать явное преобразование типов данных
    код программы:
    #include <iostream>
    
    using namespace std;
    
    int main() {
      int i = 1;
      int j = 1;
      cout << fixed;
      cout << (float)(j/j) << endl;
    
      return 0;
    }


    компилируем и выполняем:
    work@parents:~/temp> gcc test.cpp -lstdc++  -o test.o
    work@parents:~/temp> ./test.o
    1.000000
    Ответ написан
    2 комментария
  • Как разобрать массив JSON без запятых?

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

    Можно так:


    Или так:


    PS: должен отметить, что используемые регулярные выражения имеют ряд ограничений. Например если в данных будут вложенные массивы с объектами с пробелом перед закрывающей скобкой [{...}, {...}, ... ] то втарой вариант будет работать неверно. Если в данных будут строки с примерно таким содержимым "} {" или "}{" то оба варианта перестанут работать
    Ответ написан
    4 комментария
  • Как вычислить интервал для дат средних значений?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Решение для одного массива:
    код
    // пишу на js, на php уже забыл как писать:)
    
    // исходный массив данных
    var data = {
    	1555349065: 3,
    	1555349059: 10,
    	1555349057: 4,
    	1555349047: 12,
    	1555349037: 8,
    	1555349027: 11,
    	1555349017: 2
    };
    
    
    
    
    // далее понадобится некий интервал, внутри которого мы будем вычислять значения с обпределенным шагом
    // для этих целей возмем таймштамп из первой и последней ячеек, вы же можете указать любой, удобный вам
    
    
    	// получим массив ключей (специфика js) и навсякий случай отсортируем его:)
    	var times = Object.keys(data).sort();
    
    	// начальное значение интервала времени
    	var start = +times.shift();
    
    	// следующее за начальным значение интервала времени
    	var next = +times.shift();
    
    	// конечное значение интервала времени
    	var stop = +times[times.length-1];
    
    	// зададим шаг вычислений (поставил равным 3 чтобы было интересней)
    	var step = 3;
    
    
    
    // все готово для вычисления средних значений. Тут есть несколько особенностей, по сути данная задачя является интерполяцией
    // а интерполяции бывают разными. Общей особенностью любой интерполяции является то, то они не дают точный результат
    // далее для вычисления средних значений я буду использовать самую простую интерполяцию - линейную
    
    	// создадим ассоциативный массив, в который будем складывать результаты вычислений
    	var result = {};
    
    	for(var i=start; i<stop; i+=step ){
    		console.log(i);
    		// если долши до следующего значения
    		if(i>=next){
    			start = next;
    			next = +times.shift();
    		}
    
    		// вычисляем промежуточное хначение (тут вся соль, и при этом это простая пропорция)))
    		var dx = next-start;
    		var dy = data[next]-data[start];
    		var dt = i-start;
    		result[i] = data[start] + dt*dy/dx; 
    	}
    
    
    	// выводим результат
    	console.log(result);


    ну и результат:
    {
      '1555349017': 2,
      '1555349020': 4.7,
      '1555349023': 7.4,
      '1555349026': 10.1,
      '1555349029': 10.4,
      '1555349032': 9.5,
      '1555349035': 8.6,
      '1555349038': 8.4,
      '1555349041': 9.6,
      '1555349044': 10.8,
      '1555349047': 12,
      '1555349050': 9.6,
      '1555349053': 7.2,
      '1555349056': 4.8,
      '1555349059': 10,
      '1555349062': 6.5
    }


    Если необходимо решение учитывающее значения во всех массивах, просто можете объединить их скопировав ключи и их значения в один ассоциативный массив и использовать данное решение уже на объединенном массиве
    Ответ написан
    Комментировать
  • Canvas: как задать font, а затем изменить размер?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Похоже что изменяя canvas.width, параметры канваса сбрасываются в дефолтные, что на мой взгляд является логичным поведением. Если это так, то Вам надо либо искать решение с единожды заданной, фиксированной шириной канваса либо делать так как вы сделали (выставлять шрифт 2 раза)

    PS: как и говорил, изменения размера канваса сбрасывают часть его параметров в дефолтные
    https://www.w3.org/html/wg/spec/the-canvas-element.html
    Ответ написан
    7 комментариев
  • Как при достижении определённого значения сбрасывать счётчик?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    var div = document.querySelectorAll('div');
    for(var i = 0; i < div.length; i++) {
       div[i].setAttribute('data-index', i%4);
    }


    Остаток деления на 4 всегда будет в интервале 0:3

    Ответ написан
    Комментировать
  • Куда копать, чтоб написать бота для ВК?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Вы можете воспользоваться готовыми модулями:
    node-vk-bot-api
    node-vk-bot

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

    так же вы можете изучить API ВКонтакте и написать свой вариант

    Но при выборе любого из этих вариантов, Вам надо начать с изучения JavaScript
    Ответ написан
    Комментировать
  • Почему не срабатывает код?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Вот накидал пример, все работает как и должно (на мой взгляд). Если на Ваш взгляд оно работает неверно, напишите в чем оно не соответствует Вашим ожиданиям.
    Ответ написан
  • Чем заменить eval для простых выражений?

    lastuniverse
    @lastuniverse
    Всегда вокруг да около IT тем
    Можно сделать так. Только на выходе будет строка.

    var res = `${x > 5 && (y == 7.5)}`;

    https://jsfiddle.net/jey5xs2r/1/

    PS: могу предложить другое решение. Мной недавно была написана утилита для парсинга строк. Ее можно научить парсить как линейные структуры так и древовидные. Она возможно будет проигрывать в скорости узкоспециализированным решениям, но зато она универсальная, фактически швейцарский нож для парсинга структур любой сложности, что позволяет создать парсер и для HTML и для математических выражений и даже для кода при желании.

    А это пример использования для вашей задачи:
    код
    const Splitter = require("split-tools");
    
    var text = "x > 5 && (y == 7.5) || sin(Math.PI*a/360) || true";
    
    const splitter = new Splitter({
        matchers: {
            function: /\s*([a-z]\w*)\(\s*(.*)\s*\)/g,
            bracket: /\(\s*(.*)\s*\)/g,
            operator: /\s*(\>|\<|\=\=|\!\=|\&\&|\|\||\+|\-|\*|\/|\%)\s*/g,
            variable: /\s*([a-z][\w\.]*)\s*/gi,
            sting: /\s*\"(.*?)\"\s*/gi,
            boolean: /\s*(true|false)\s*/gi,
            value: /\s*(\d[\d\.]*)\s*/gi
        }
    });
     
     
    const tree = {
        "brackets": ["function", "bracket", "operator", "variable", "sting", "boolean", "value"]
    };
     
    function subSplit(id, text) {
        console.log("subSplit:", id, "[", text, "]");
        if(tree[id] && tree[id].length)
            return splitter.process(text, tree[id]);
        return text;
    }
     
     
    splitter.addParser("function",(match,name,body)=>{
        return {
            type: "function",
            name: name,
            body: subSplit("brackets", body)
        };
    });
    
    splitter.addParser("bracket",(match,body)=>{
        return {
            type: "bracket",
            body: subSplit("brackets", body)
        };
    });
    
    splitter.addParser("operator",(match,body)=>{
        return {
            type: "operator",
            body: body
        };
    });
    
    splitter.addParser("variable",(match,body)=>{
        return {
            type: "variable",
            body: body
        };
    });
    
    splitter.addParser("string",(match,body)=>{
        return {
            type: "string",
            body: body
        };
    });
    
    splitter.addParser("boolean",(match,body)=>{
        return {
            type: "boolean",
            body: !!body
        };
    });
    
    splitter.addParser("value",(match,body)=>{
        return {
            type: "value",
            body: +body
        };
    });
     
     
    const list = splitter.process(text, tree.tags);
     
    console.log("\n\nresult:\n",JSON.stringify(list, null, '  '));



    На выходе из парсера будет массив пройдясь по которому можно будет вычислить значение распарсенного математического выражения:
    результат
    [
      { "type": "variable", "body": "x" },
      { "type": "operator", "body": ">" },
      { "type": "value", "body": 5 },
      { "type": "operator", "body": "&&" },
      { "type": "bracket", "body": [
          { "type": "variable", "body": "y" },
          { "type": "operator", "body": "==" },
          { "type": "value", "body": 7.5 }
        ]
      },
      { "type": "operator", "body": "||" },
      { "type": "function", "name": "sin",   "body": [
          { "type": "variable", "body": "Math.PI" },
          { "type": "operator", "body": "*" },
          { "type": "variable", "body": "a" },
          { "type": "operator", "body": "/" },
          { "type": "value", "body": 360 }
        ]
      },
      { "type": "operator", "body": "||" },
      { "type": "variable", "body": "true" }
    ]
    Ответ написан