Re[3]: [Брюзжание] Старики и молодёжь
От: cppguard  
Дата: 14.07.23 07:38
Оценка: -1
Здравствуйте, Умака Кумакаки, Вы писали:

Я прям открыл этой темой шкатулку с неадекватами

УК>самому первому что учится фрилансер, это распознавать неадекватных заказчиков. Самый верный признак неадекватного заказчика — его слова о том что это "делать пару часов", "для профессионала минутное дело" и всё в таком духе. Это просто как автоматом лейбл "я заказчик-мудак" себе повесить.


Ни в ТЗ, ни в тексте задания про "пару часов" ничего нет. Свои влажные фантазии нужно вытирать салфетками, а то неприлично. Кстати, я очень часто слышал от русских, что с русскими заказчиками работать не надо, потому что "они все жадные и тупые". Но вот странно — у меня такой проблемы никогда не было.

УК>делал подобную задачу десять лет назад примерно за неделю и $2000 баксов.


Ну молодец, что сказать. Странно, что выбрал такой сложный путь, чтобы разводить людей, есть ведь способы проще и прибыльнее.

УК>всё что он смог за час это нагуглить ответы на стековерфлоу.


Не, ну ты-то не смотришь никогда туда и вообще не гуглишь. Прямиком к ноосфере подключаешься и оттуда черпаешь знания. А вообще, я что-то пропустил — стековерфлоу теперь нельзя использовать?

УК> топикстартер лютый балобол. кода от него мы, конечно же, не увидим.


А должен? Ну на, смотри.

  Код на $2000
<!DOCTYPE html>
<html>
<head>
  <title>D3.js Real-Time Line Chart</title>
  <style>
    .chart-container {
      width: 100%;
      height: 300px;
      margin-bottom: 20px;
    }
    .line {
      fill: none;
      stroke-width: 2px;
    }
  </style>
  <script src="https://d3js.org/d3.v7.min.js"></script>
</head>
<body>
  <div id="chart-container">
    <svg id="chart"></svg>
  </div>

  <script>
    // Establish a WebSocket connection
    const socket = new WebSocket('ws://signal.mmr.systems:8080');

    // Set up the D3.js line chart
    const container = document.getElementById('chart-container');
    const containerWidth = container.clientWidth;
    const containerHeight = container.clientHeight;

    const svg = d3.select('#chart')
      .attr('width', containerWidth)
      .attr('height', containerHeight);

    const margin = { top: 20, right: 20, bottom: 30, left: 50 };
    const width = containerWidth - margin.left - margin.right;
    const height = containerHeight - margin.top - margin.bottom;
    const g = svg.append('g').attr('transform', `translate(${margin.left}, ${margin.top})`);

    const x = d3.scaleTime().range([0, width]);
    const y = d3.scaleLinear().range([height, 0]);

    const line = d3.line()
      .x(d => x(d.time))
      .y(d => y(d.value));

    g.append('g')
      .attr('class', 'x-axis')
      .attr('transform', `translate(0, ${height})`)
      .call(d3.axisBottom(x));

    g.append('g')
      .attr('class', 'y-axis')
      .call(d3.axisLeft(y));

    const data = {}; // Object to store data for each line

    // Handle incoming WebSocket data
    socket.addEventListener('message', event => {
      const message = JSON.parse(event.data);
      const time = new Date(message.time * 1000);
      const values = message.values;
      updateChart(time, values);
    });

    // Function to update the chart with new data
    function updateChart(time, values) {
      values.forEach((value, index) => {
        const lineName = `line${index + 1}`;

        if (!data[lineName]) {
          // Initialize data for each line
          data[lineName] = {
            values: [],
            color: d3.schemeCategory10[index], // Use different colors for each line
          };

          // Add the line path for the new line
          g.append('path')
            .attr('class', `line ${lineName}`)
            .style('stroke', data[lineName].color);
        }

        // Add the new data point to the line's data
        data[lineName].values.push({ time, value });

        // Update the chart
        updateLine(lineName);
      });
    }

    // Function to update an individual line in the chart
    function updateLine(lineName) {
      const lineData = data[lineName];

      // Update the x-axis and y-axis scales based on the line data
      x.domain(d3.extent(lineData.values, d => d.time));
      y.domain([d3.min(lineData.values, d => d.value), d3.max(lineData.values, d => d.value)]);

      // Select the line path and update its data and attributes
      g.select(`.${lineName}`)
        .datum(lineData.values)
        .attr('d', line);
    }
  </script>
</body>
</html>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.