LINUX.ORG.RU

Вебные аналого-цифровые индикаторы.

 , копрофагия


8

2

По итогам Есть ли что-то типа Grafana только на порядки легче и проще?

Написал ещё тогда и забыл. Ну пусть новогодний подарочек будет.

Продолжаем делать правильный вебдваноль. Как обычно, всё очень маленькое (2.5kb) и шустрое, на plain JS без каких-либо «фреймворков» и прочего многотонного жирного говна. Легко влезает в эмбедщину всякую и т.п.

Итак…

gauge.js

'use strict'

function Gauges( class_name )
{
    var _ = this;
    _.urls = [];
    var gauge = document.getElementsByClassName( class_name );
    for( var j = gauge.length; j--; )
    {
        var e = gauge.item(j);
        var g = JSON.parse( e.getAttribute( "data-conf" ) );
        if( !g ) return;

        g.id = e.id;
        g.title = e.title;
        e.removeAttribute( 'title' );

        var c = g.size / 2;
        var r = 0.8 * c;
        var l = 2 * Math.PI * r;

        for( var i = _.urls.length; i--; ) { if( _.urls[i].url == g.url ) break; }
        if( i < 0 ) _.urls.push( { url: g.url, gauges: [ g ] } );
        else        _.urls[i].gauges.push( g );

        e.innerHTML =
            '<svg width="' + g.size + '" height="' + g.size + '">'
          + '<circle class="gauge-bg" id="' + g.id + '-bg" cx="' + c + '" cy="' + c + '" r="' + r + '" stroke-dasharray="' + ( 2 * l / 3 ) + " " + ( l / 3 ) + '" stroke-dashoffset="' + ( -5 * l / 12 ) + '"/>'
          + '<circle class="gauge-pnt" id="' + g.id + '-pnt" cx="' + c + '" cy="' + c + '" r="' + r + '" stroke="' + g.color + '" stroke-width="' + ( 0.1 * g.size ) + '" stroke-dasharray="0 1"/>'
          + '<text class="gauge-val" id="' + g.id + '-val" fill="' + g.color + '" x="' + c + '" y="' + ( 1.1 * c ) + '" font-size="' + ( 0.45 * r ) + '" text-anchor="middle"></text>'
          + '<text class="gauge-title" x="' + c + '" y="' + ( c + r ) + '">' + g.title + '</text>'
          + '</svg>';
    }

    _.urls.forEach( function( u )
    {
        _.update( u );
        setInterval( function(){ _.update( u ) }, u.gauges[0].int );
    } );
}

Gauges.prototype.set = function( id, min, max, val )
{
    var e = document.getElementById( id + '-pnt' );
    if( !e ) return;

    var r = e.getAttribute( 'r' );
    var l = 2 * Math.PI * r;
    var v = val < min ? min : val > max ? max : val;
    var dash = ( 2 / 3 ) * l * ( v - min ) / ( max - min );

    e.setAttribute( 'stroke-dasharray', [ dash, l - dash ]);
    e.setAttribute( 'stroke-dashoffset', (-5 / 12) * l );

    document.getElementById( id + "-val" ).textContent = val;
}

Gauges.prototype.update = function( u )
{
    var _ = this;
    var req = new XMLHttpRequest();
    req.onreadystatechange = function()
    {
        if( this.readyState != 4 ) return;
        var obj = JSON.parse( this.responseText );
        if( !obj ) return;
        u.gauges.forEach( function( g )
        {
            var v = g.path.split('.').reduce( function( o, k ) { return o && o[k] }, obj );
            _.set( g.id, g.min, g.max, v.toFixed( g.prec ) );
        } );
    };
    req.open( "GET", u.url );
    req.send();
}

gauge.css

@font-face {
    font-family: "7SEG";
    src: url("DSEG7Classic-BoldItalic.ttf") format("opentype");
}

.gauge-pnt {
  fill: transparent;
}

.gauge-bg {
  stroke: #808080;
  stroke-width: 1px;
  fill: transparent;
}

.gauge-val {
    font-family: "7SEG", serif;
}

.gauge-title {
    text-anchor: middle;
    fill: #C0C0C0;
}

Шрифт DSEG7Classic-BoldItalic.ttf ради прикола, можно из дебиановского пакета fonts-dseg взять. Или в формате woff2, он размером поменьше будет.

Как использовать:

<HTML>
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" content="no-cache">
<META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
<LINK rel="stylesheet" type="text/css" href="gauge.css">
<SCRIPT src="gauge.js" type="text/javascript"></SCRIPT>
<SCRIPT>
var ups_gauges;
window.addEventListener( 'load', function() { ups_gauges = new Gauges( 'ups' ); }, false );
</SCRIPT>
<STYLE>
a.ups { outline: none; }
body { background-color: #000000; color: #c0c0c0; }
</STYLE>
<TITLE>Gauge</TITLE>
</HEAD>
<BODY>
<a href="ups/voltage.html" class="ups" title="UPS Vin, V"  id="Vin" data-conf='{"url":"data/ups.json","path":"Vin","int":20000,"min":0,"max":300,"prec":0,"color":"#40C040","size":150}'></a>
<a href="ups/load.html"    class="ups" title="UPS Load, %" id="Load" data-conf='{"url":"data/ups.json","path":"Load","int":20000,"min":0,"max":100,"prec":0,"color":"#C040C0","size":150}'></a>
<a href="ups/temp.html"    class="ups" title="UPS T, °C"   id="Temp" data-conf='{"url":"data/ups.json","path":"Temp","int":20000,"min":0,"max":100,"prec":1,"color":"#C0C0C0","size":150}'></a>
</BODY>

data/ups.json

{ "Vin": 193.2, "Load": 40, "Temp": 38.0 }

В аттрибут data-conf элемента который превращаем в индикатор пишем JSON где

url - URL источника данных для индикатора в формате JSON
path - "путь" в JSON до нужной величины, например "sensors.0.temp"
int - интервал обновления в миллисекундах
min - минимальное значение аналоговой шкалы индикатора
max - максимальное значение аналоговой шкалы индикатора
prec - число цифр после запятой для цифрового индикатора 
color - цвет индикатора
size - размер индикатора

У элементов превращаемых в индикаторы должен быть установлен аттрибут id.

В аттрибуте title указывается подпись под индикатором.

Элементам индикаторов одной группы присваеваем один класс и его имя передаём в конструктор new Gauges('class_name') когда нужно создать и запустить индикаторы.

Если у нескольких индикаторов одного и того же класса URL источника данных одинаковый, то запрос к этому URL при периодическом обновлении будет только один, но при этом будут обновлены все индикаторы этого класса с этим URL.

Выглядит так: http://stanson.ch/gauges.png

Лицнзия WTFPL

★★★★★

Последнее исправление: Stanson (всего исправлений: 8)

Ответ на: комментарий от Stanson

Можно, но Map относительно новый, и большого смысла его использовать нету

А отличия var от let вспомнишь? А this и arrow? И мне очень нравится эта лапша с e.innerHTML = Есть такой символ: `
Что он сделает, вспомнишь?

А потом, когда надо будет (поверь, надо) что-то поменять или добавить функционала, будешь смотреть на свой говнокод и тупить, что «куда» и «зачем». А есил умений хватит его передать другим… Но у тебя таких умений нетЪ. Ты же выложил ЭТО сюда, не побоялсо критики?

В одном я с тобой солидарен, SVG при правильном применении даёт много плюсов с responsive design.

И мне нравятся твои высказывания, я их ниже приведу ;)

Чо-то «недилетанты» так ничего настолько маленького и лёгкого и не родили за годы своего вебмакачества. Мне плевать на то, что им там надо. Я как-то не очень на предмет копания в потаённых желаниях извращенцев. Поэтому «недилетанты» просто идут нахер.

хочешь на сайт в любое место добавляешь, вот и рвутся пердаки у вебмакак, потому что они так не могут. :)

modest
()
Ответ на: комментарий от modest

А отличия var от let вспомнишь?

Scope у них разный. В данном высере не критично.

А this и arrow?

У arrow нет своего this. Опять же нет нужды в такой фиче.

Есть такой символ: ` Что он сделает, вспомнишь?

Зачем-то в жабоскрипт завезли переменные/выражения внутри строк как перле, похапе или bash. Почему с самого начала это не сделали в этом очевидно скриптовом язычке который подразумевает темплейтство в немалых коичествах - большой вопрос. Опять же, нет никакой нужды в использовании этого здесь.

Ты же выложил ЭТО сюда, не побоялсо критики?

По большому счёту я спокойно к критике отношусь и вот ни разу не боюсь её. Но, как обычно, в случае выкладывания моих немонстроузных жабоскриптовых высеров, критики-то и нету. Сплошная вкусовщина и недовольство отсутствием использования самых распоследних фич, которые в каком-нибудь не очень новом вебките внезапно могут не работать. Ну можно же было, ну, скажем, например реально покритиковать остутсвие метода для удаления индикатора с выключением соответствующего таймера если не осталось индикаторов с неким URL. Но нет же - всё како-то бла-бла-бла про свистелки и перделки этого смешного бейсика на котором высер написан, или вовсе нытьё про coding style. Причём самое смешное, что в отличии от, этот высер можно буквально за 10 минут привести в соответствие с любыми воззрениями недовольного пассажира, без всякого этого копания в тонне разных сырцов и сотнях функций, без выяснения кто на ком стоял и кто кого вызывал и где находится то, что хочется поменять.

А выложил это сюда потому что обычно так и делаю, когда пишу то, что почему-то до сих пор не написали, при всей очевидности задачи.

Судя по тому, что несколько пассажиров даже не поленились звездануть темку, что на ЛОРе вообще огромная редкость - спрос на такие высеры есть, «народу нравится».

Stanson ★★★★★
() автор топика
Последнее исправление: Stanson (всего исправлений: 2)
Ответ на: комментарий от Nervous

Когда однобуквенные ненавидящие документацию макакичи скатают из какуль огромный ком неподдерживаемого говна — будет не до смеха. А они обязательно скатают.

Тогда и будете предъявлять. Гораздо хуже, когда понапишут комментов в скрипте, что сам код среди них теряется. Потом код многократно правится, а комменты конечно же нет. Или вообще они дезинформируют ввиду косноязычности автора. У меня аж привычка выработалась скипать комменты на всякий случай. Код всё расскажет сам.

Многобуквенность тоже не всегда хорошо, а иногда просто вредно. В локальных контекстах это совершенно лишнее. Но лучше конечно давать нормальные имена, а потом биндить алиасы.

bread
()
Ответ на: комментарий от Stanson

Я согласен, что надо, надо в болото забрасывать. И дело правое. Просто если ты говоришь о «бери и вставляй», то у меня, как обезьяны, будет бобо. Не дай боже я открою новый цикл, насмотревшись, как дядька (ты) пишет быстрый и божественный код, а оно раз и непонятна. Var…

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

Намекали тебе, только мягко. Ты тут всё впилил, а если докручивать? Всё равно эта штука на пять строк вырастет на 30-40. Как только пользоваться ей начнут, пожелания «макак» - «было бы неплохо такой вот функционал прикрутить».

И хочешь, чтобы сразу и по яйцам ногам? Кинь код в общедоступное, опиши нормально, что оно делает, потом на reddit радостно, с улыбкой кинь ссылку. ;)

А вот это,

у можно же было, ну, скажем, например реально покритиковать остутсвие метода для удаления индикатора с выключением соответствующего таймера если не осталось индикаторов с неким URL.

Это выше.

modest
()
Ответ на: комментарий от modest

Всё равно эта штука на пять строк вырастет на 30-40.

Нет, не вырастет. И вот почему - те, кому нужны все возможные свистелки и перделки, декларативная кастомизация и т.п. никогда ничего не допишут - им готовенькое нужно, чтобы тяп-ляп и в продакшен и чтобы если хозяин скажет что надо стрелочку а не шкалу, не пришлось думать головой. Целевая аудитория данного высера совершенно иная. И если кто чего и допишет переделает, то это не вызовет раздувания кода до вебмакачьих пределов. Потому что для себя делается, а не для дяди. Нужна будет стрелочка - перепишут svg’шку как надо, только и всего.

Декларативщина имеет свои пределы, после которых она приводит к резкому раздуванию и усложнению кода. В таких случаях код проще переписать, создав просто другой высер. Надо со стрелочками индикатор - не вопрос, сделай такой же маленький gauge-arrow.js, да и всё.

Кинь код в общедоступное, опиши нормально, что оно делает, потом на reddit радостно, с улыбкой кинь ссылку. ;)

Но зачем? Кому надо - и так найдёт.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

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

Понял? Если либа - то надо, чтобы умела всякое, рыночек. Если сам написал, то тут уже какие требования, но в свободный доступ не кладёшь, люди и сами могут.
Если ты хочешь, чтобы твой код был эталоном для эволюции (что очень даже неплохо и я поддерживаю) - причеши. Смотреть без кровавых слёз нет сил. А то в переписке твои выкрики «кодовысер» смахивают на обезьяньи :)

Вообще, многие нормальные площадки так и начинались, с решения случаев, потом группировали по темам. Как примеры - https://www.lissyara.su или stackoverflow.com

modest
()
Ответ на: комментарий от modest

Смотреть без кровавых слёз нет сил.

Кто-то заставляет? Не нравится - отформатируй как надо, замени старые фичи на модные, в чём проблема?

Вкусовщина это бич современного программирования. Пробелы или табы? Да насрать.

Но суть не в этом. Суть в том, что любой код должен быть легкомодифицируемым. Тем более код используемый для каких-то совершенно элементарных вещей. Использование всяких модных новшеств и фреймворков этому очень сильно вредит.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от bread

код многократно правится, а комменты конечно же нет

Потому что макакичи, да.

Код всё расскажет сам

Код может рассказать только что он делает, а не зачем. Чего хотел добиться афтар, тебе придется догадываться самому, и если это не какая-то очевидная крудотривиальщина, то лучше бы комментарии были. И вообще документация.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от Legioner

Да, я тоже думаю надо на WebGL и wasm-е писать всё.

peregrine ★★★★★
()
Ответ на: комментарий от TDrive

И зачем нужен fetch? Что он даст кроме несовместимости со всякими WebKit и т.п.? Да даже относительно новые тельавизоры его не умеют. Тельавизор новый покупать ради того, что какой-то вебмакаке захотелось сраный fetch зачем-то вкорячить?

ЗЫ: ссылка на обезьяний русскоязычный говносайт говорит о многом. :)

Stanson ★★★★★
() автор топика
Последнее исправление: Stanson (всего исправлений: 2)
Ответ на: комментарий от TDrive

Опять какие-то новшества ради новшеств.

Что даст использование data- кроме несовместимости?

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

Так конструктивно критиковать нечего, маленькое, шустрое, работает,простое как 5 копеек

Писать нужно так что бы код можно было нормально поддерживать иначе у тебя стоимость новых патчей будет все время увеличиваться, а потом ты выкинешь все это говно и начнешь писать его с нуля.

TDrive ★★★★★
()
Ответ на: комментарий от Stanson

А какая тебе нужна совместимость? Что такое полифилы знаешь?

ЗЫ: ссылка на обезьяний русскоязычный говносайт говорит о многом. :)

Так ты хотя бы с него начни, твой то уровень ниже инфы на этом сайте.

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

иначе у тебя стоимость новых патчей будет все время увеличиваться

Какие нахер патчи? Какая стоимость? У вас всех CD/CI головного мозга что-ли?

Это рыба для индикаторов. Всё. Человек берёт эту рыбу, правит под свои хотелки, если нужно, и никогда больше ничего в этих 50 строчках не меняет, потому что незачем. Оно у него в каком ESP32 сидит, а телек на стенке показывает всякое. Годами и десятилетиями.

Clown world, жёваный крот. Сраный индикатор непременно нужно постоянно патчить и переписывать, несомненно исключительно ради патченья и переписывания. Потом ещё вуёв с ангулярами в него насовать, чтобы хозяин думал что работа идёт полным ходом.

Идите нахер, клоуны. Засрали веб по самое небалуйся своим говном ради говна, рефакторингом ради рефакторинга и т.п.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

Это рыба для индикаторов. Всё. Человек берёт эту рыбу, правит под свои хотелки, если нужно, и никогда больше ничего в этих 50 строчках не меняет, потому что незачем.

Тебе уже, прямо в этом треде, предложили изменить шкалу.

Идите нахер, клоуны. Засрали веб по самое небалуйся своим говном ради говна, рефакторингом ради рефакторинга и т.п.

Вот такие как ты его и засирают, ты даже критику не способен воспринимать.

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

А какая тебе нужна совместимость?

Максимально доступная без какого-либо усложнения. Этот высер даже на Nokia N9 и iPhone 5 работает. При этом ничего браузероспецифичного или каких-то специальных ухищрений для этого в нём вообще нет. Ванильный JS без говна.

Что такое полифилы знаешь?

Жирное говно с ненужным кодом. Дебилизм ради дебилизма. Так хочется непременно использовать fetch, но чтобы начальник с инкрустированным красным деревом древним айпадом не ругался что не работает надо в код засунуть реализацию fetch на старом XMLHttpRequest. Вместо того, чтобы просто не тащить этот сраный fetch.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от TDrive

Тебе уже, прямо в этом треде, предложили изменить шкалу.

А мне-то это зачем? Меня и такая устраивает. Кого не устраивает, может сделать это за 5 минут без малейших проблем, потому что код всего высера целиком влезает на один экран и настолько прост, что надо быть полным дебилом чтобы не суметь добавить туда риски шкалы, причём именно такие, какие хочется, а не какие захотел чужой дядя. А всякие стили вообще в css можно навертеть. Не надо ни тонны документации лопатить, чтобы найти за что там надо поторогать высер, чтобы риски появились, ни ковырять 100500 слоёв абстракций чтобы найти где поменять то, что не удосужились в декларативщину вынести, ни вопросов на форумах задавать.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от MOPKOBKA

Послушай умных людей

Я и послушал. Убрал ненужный findIndex. Всё пучком.

не выйдет у тебя нового fizz buzz enterprise edition.

Вы все и правда не врубаетесь, что никакие фреймворки и универсальные либы вообще не нужны в вебе, и что именно такой подход сделал из веба лютую говнину?

Stanson ★★★★★
() автор топика
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от Stanson

А мне-то это зачем?

Ну ты же называешь это правильным вебом, подарком на новый год, что бы люди брали твой код и улыбались. А тут вдруг оказывается, что твое творение врайтонли и тебя все устраивает.

TDrive ★★★★★
()
Ответ на: комментарий от Stanson

Вы все и правда не врубаетесь, что никакие фреймворки и универсальные либы вообще не нужны в вебе, и что именно такой подход сделал из веба лютую говнину?

https://youtu.be/O9tvj8WY1BY

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

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

Ну берут и улыбаются.

А тут вдруг оказывается, что твое творение врайтонли

Да что, дядь, вообще плохого в врайтонли?

Существуют люди, которым нахер не всралось постоянно что-то там переписывать ради переписывания, тем более на жабоскрипте. Код - это не самоцель, это средство. Человечку хочется увидеть индикатор на страничке, который будет наглядно представлять какой-то параметр в его системе годами а не заниматься постоянным переписыванием и обновлением какого-то совершенно несущественного жабоскриптного высера. И ему надо чтобы этот индикатор не приводил к необходимости покупки нового телека/планшета/железки. Внезапно. Нужен именно что врайтонли код. Написал и забыл, занимаешься более важными и существенными вещами, в том числе используя этот индикатор. Цель - не код индикатора, а чтобы индикатор показывал значение и не требовал никаких дополнительных действий для своего функционирования. А если вдруг лет через 10 понадобится что-то в этом коде поменять - то это вообще не проблема, потому что весь код влезает на 1 экран и настолько прост и прозрачен, что не понадобится вообще никаких усилий чтобы вспомнить или заново понять что к чему и что надо поменять. Врайтонли - это офигенно, и в большинстве случаев именно то, что нужно людям. Купил/сделал вещь - и пользуешься десятилетиями, а не купил/сделал и пошёл покупать/делать новую, потому что какому-то педику непременно нужно показать что он не напрасно свою зряплату получает.

ЗЫ: Этот высер озвездюливают. Значит кому-то оказалось полезно. Могу я посмотреть на твой высер, весь такой модный, правильный, масштабируемый с последними фичами, который озвездюлили хотя бы одной звездой на ЛОРе?

Stanson ★★★★★
() автор топика
Последнее исправление: Stanson (всего исправлений: 2)
Ответ на: комментарий от Stanson

Да что, дядь, вообще плохого в врайтонли?

Его сложно аудитить/дебажить/апдейтить. А что плохого в том что бы дать переменным человеческие названия?

Существуют люди, которым нахер не всралось постоянно что-то там переписывать ради переписывания, тем более на… бла бла бла.

Что делать с людьми которые переписывают для улучшения или из за изменения требований?

бла бла бла… Внезапно. Нужен именно что врайтонли код….

А нормальный читаемый код не подойдет? Или придумать нормальные названия переменным это слишком сложно и увеличило бы время разработки?

ЗЫ: Этот высер озвездюливают. Значит кому-то оказалось полезно. Могу я посмотреть на твой высер, весь такой модный, правильный, масштабируемый с последними фичами, который озвездюлили хотя бы одной звездой на ЛОРе?

Прости я не заметил сияния этих звезд) Моих высеров со звездами на лоре нету, а должны быть?

TDrive ★★★★★
()
Последнее исправление: TDrive (всего исправлений: 1)
Ответ на: комментарий от Stanson

ЗЫ: Этот высер озвездюливают. Значит кому-то оказалось полезно. Могу я посмотреть на твой высер, весь такой модный, правильный, масштабируемый с последними фичами, который озвездюлили хотя бы одной звездой на ЛОРе?

И тут мы перешли к «сперва добейся».

Сейчас JS стал изящнее, что-ли. Вот эти все High-order, Map, filter… А я тебе скромно писал про var. Ты же модно use strict влепил? Влепил. Вот это всё на коленке сделал? Сделал, под пиво. А я - обезьяна. Мне картинка твоя оч понра.

Получается, что ты своим кодом склоняешь к кринжу.
Я даже так скажу, я не пишу на JS в стиле Cи. Давно. А ты… Ты странный ;)
Выпускай версию 2.0. С блекджеком и нормальным, красивым JS, нормальным html (стили то в одном месте, да?), с нормальными переменными в CSS. Чтобы абизяна могла цвет поменять. И с мурзилкой для нас, абизян. Чтобы понятно было, куда и зачем. На нормальном китайском языке.

Добавлю, я не пишу на «отъебись». Я вкладываю немного себя. Мне приятно, когда не просто работает, а приятно и на код смотреть. Наверное, я просто вымирающий вид.

modest
()
Последнее исправление: modest (всего исправлений: 1)
Ответ на: комментарий от modest

Добавлю, я не пишу на «отъебись». Я вкладываю немного себя. Мне приятно, когда не просто работает, а приятно и на код смотреть. Наверное, я просто вымирающий вид.

Нет, просто ТС никогда не работал в команде.

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

И это печально. Будет стресс и большие проблемы. У меня так знакомый попал. Думал, что всё знает и умеет. Реальность бьёт больно.

modest
()
Ответ на: комментарий от TDrive

Его сложно аудитить/дебажить/апдейтить.

Зачем его аудитить/дебажить/апдейтить? Целевой аудитории данного высера это нафиг не нужно. Вообще никак.

А что плохого в том что бы дать переменным человеческие названия?

Что нечеловеческого в наименовании переменной для единственного в высере радиуса r а единственный массив URLек urls? По-моему обзывать единственный локальный для высера радиус чем-то типа radiusOfGaugeScaleCircle - это полный идиотизм.

Что делать с людьми которые переписывают для улучшения или из за изменения требований?

Идти и пердолиться с графаной, например. С ней можно столько лапши на уши хозяину навешать, что он даже может зарплату повысить.

А нормальный читаемый код не подойдет?

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

Или придумать нормальные названия переменным это слишком сложно и увеличило бы время разработки?

Какое название надо дать переменной которая используется для хранения радиуса индикатора?

Моих высеров со звездами на лоре нету, а должны быть?

Был бы хоть какой-то аргумент. Типа твои «правильно написанные» тобой поделия нравятся больше. А так - никаких аргументов нет, только предложения «улучшить», без малейших оснований в необходимости этих «улучшений».

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

Зачем его аудитить/дебажить/апдейтить? Целевой аудитории данного высера это нафиг не нужно. Вообще никак.

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

Что нечеловеческого в наименовании переменной для единственного в высере радиуса r а единственный массив URLек urls? По-моему обзывать единственный локальный для высера радиус чем-то типа radiusOfGaugeScaleCircle - это полный идиотизм.

var g = JSON.parse( e.id );

e это видимо element? почему не написать element? А g это что такое?

function Gauges( n )

Что такое n? номер? как человек по такой сигнатуре функции должен понять что в нее нужно передать?

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

У меня приличный опыт ревью. Другие просто не станут читать это говно.

Какое название надо дать переменной которая используется для хранения радиуса индикатора?

Как есть так и назови, что ты теряешь то?

TDrive ★★★★★
()
Ответ на: комментарий от modest

И тут мы перешли к «сперва добейся».

Нет. Мы перешли к поиску хоть каких-то оснований для применения новомодных плюшек. Вдруг они реально нужны кому-то?

Сейчас JS стал изящнее, что-ли.

Эмм.. Даже прям не знаю. Становится ли изящнее жигуль, если на него поставить синие писалки и брызговики с надписью Sparco? Для кого-то может быть и становится…

Ты же модно use strict влепил?

Это не более чем какой-то очень условный аналог -Wall для gcc. Можно убрать, если не нравится.

Получается, что ты своим кодом склоняешь к кринжу.

Опять 25. Цель - не код. Цель - простой, лёгкий и понятный самодостаточный вебный индикатор, который, к тому же, легко переделать под свои нужды. Который пригоден для использования где угодно, от мелких однокристалок до любых, сколь угодно навороченных проектов любым человеком обладающим минимальными базовыми знаниями в програмировании (не в программировании на JS модным нынче образом, а вообще).

Я даже так скажу, я не пишу на JS в стиле Cи. Давно. А ты… Ты странный ;)

А я пишу. Чтобы было понятно кому угодно. Чтобы для допиливания под себя не нужно было штудировать всяике тонкости, свистелки и перделки язычка.

Выпускай версию 2.0

Здесь нет и не будет никаких версий. Это законченный проект.

Мне приятно, когда не просто работает, а приятно и на код смотреть.

Наверно пишущим на каком-нибудь APL тоже приятно на код смостреть.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

Был бы хоть какой-то аргумент. Типа твои «правильно написанные» тобой поделия нравятся больше. А так - никаких аргументов нет, только предложения «улучшить», без малейших оснований в необходимости этих «улучшений».

У тебя люди попросили улучшений, возможно как раз те кто должен улыбаться от твоего кода. А ты их обломал.

Напоследок еще про id напишу, если не для тебя то для окружающих.

У атрибута id есть назначение, уникальный идентификатор элемента. Твой код, допустим, будет подключаться в некий готовый сайт и фронтендерам может понадобится заюзать этот атрибут для своих целей, твоя «либа» лишает их этой возможности потому, что ты заюзал id для хранения данных инициализации. И все это типо ради поддержки старых браузеров. Что мешает передать данные инициализации в

ups_gauges = new Gauges( 'ups' )

отдельно для каждого индикатора

как ты вообще представляешь себе использование ups_gauges? через нее даже нельзя получить доступ к отдельному индикатору. Они там массивом в порядке инициализации.

Что мешает сделать по инициализации на каждый индикатор и оставить атрибуты элементов в покое?

Нужна ли вообще в new Gauges( 'ups' ) логика поиска элементов, а если у человека в его JS уже найдены все нужные элементы и он мог бы просто их передать в Gauges но твой код этого не позволяет, придется второй раз искать, такой вот оверхед на пустом месте.

Продолжать можно очень долго, такое вот у меня отсутствие аргументации.

TDrive ★★★★★
()
Последнее исправление: TDrive (всего исправлений: 1)
Ответ на: комментарий от Stanson

Нет. Мы перешли к поиску хоть каких-то оснований для применения новомодных плюшек. Вдруг они реально нужны кому-то?

Подожди, новомодные плюшки пока рано, у тебя с более фундаментальными вещами проблема.

Цель - простой, лёгкий и понятный самодостаточный вебный индикатор, который, к тому же, легко переделать под свои нужды.

Ты же признал что он врайтонли.

Здесь нет и не будет никаких версий. Это законченный проект.

Ну лол.

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

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

Нет, это ты придумываешь каких-то «всех», которые, на самом деле очень ограниченный круг «специалистов по написанию программ на Javascript за деньги», которым, внезапно, эти индикаторы вообще нахрен не сдались - они ж даже типового источника данных для них сделать не смогут. :)

e это видимо element? почему не написать element? А g это что такое?

Очевидно, gauge. В высере есть какие-то другие сущности начинающиеся на g?

Что такое n? номер?

name. Имя группы индикаторов. Указывается в классе элемента который будет превращён в индикатор.

У меня приличный опыт ревью. Другие просто не станут читать это говно.

«Другие» это кто? Вышеуказанные «все», которые на самом деле «специалисты по написанию программ на Javascript за деньги»?

Как есть так и назови, что ты теряешь то?

Со средней школы любой нормальный человек помнит, что радиус обозначается латинской r. Других радиусов тут нет. Как ещё можно обозвать эту переменную?

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

Нет, это ты придумываешь каких-то «всех», которые, на самом деле очень ограниченный круг «специалистов по написанию программ на Javascript за деньги», которым, внезапно, эти индикаторы вообще нахрен не сдались - они ж даже типового источника данных для них сделать не смогут. :)

Ну и для кого ты в результате это написал?

Очевидно, gauge. В высере есть какие-то другие сущности начинающиеся на g?

Что мешает написать gauge?

name. Имя группы индикаторов. Указывается в классе элемента который будет превращён в индикатор.

Что мешает написать className?

TDrive ★★★★★
()
Ответ на: комментарий от Stanson

Именно. Переписал как тебе нужно и забыл. Что не так?

То что он уже врайтонли. Его уже проще написать с 0 чем читать то что ты написал.

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

Твой код, допустим, будет подключаться в некий готовый сайт и фронтендерам может понадобится заюзать этот атрибут для своих целей, твоя «либа» лишает их этой возможности потому, что ты заюзал id для хранения данных инициализации.

После инициализации id элемента будет иметь значение указанное в id JSON’a для инициализзации. Фронтендеры могут использовать его как обычно.

как ты вообще представляешь себе использование ups_gauges? через нее даже нельзя получить доступ к отдельному индикатору. Они там массивом в порядке инициализации.

Если очень надо будет - то несложно пройтись по этому массиву и найти нужный именно по id. Иметь 100500 индикаторов на странице - идиотизм. Больше 20 уже глупость. Поэтому накладные расходы на этот поиск среди 20 элементов ничтожны. Логика «масштабирования» тут не работает. Число индикаторов на страничке не масштабируется, по объективной причине ограниченности человеческого восприятия. Если тебе требуется 100500 индикаторов на одной страничке, то у тебя проблемы вовсе не с жабоскриптом.

Нужна ли вообще в new Gauges( ‘ups’ ) логика поиска элементов

Да, нужна. Чтобы создавать индикаторы чисто декларативно. Если нужна будет, например, температура рядом с UPS с другого источника данных, то достаточно просто добавить элемент с нужным классом и настройками в id.

а если у человека в его JS уже найдены все нужные элементы и он мог бы просто их передать в Gauges но твой код этого не позволяет

Что мешает переписать Gauges так, как нужно? Чтобы позволяло? Там же 70 строчек кода всего.

Продолжать можно очень долго, такое вот у меня отсутствие аргументации.

Аргументация у тебя уровня «почему без шапки».

Тут на самом деле есть до чего докопаться, на самом деле, как в логике, так и в использовании тех или иных решений, но ты умудрился ничего из этого в упор не увидеть.

  • нет реализации удаления индикатора
  • нет остановки таймера если удалены все индикаторы с одним источником
  • разные группы индикаторов с одинаковыми источниками будут дёргать один источник несколько раз и т.д.

Это не мешает использованию и работоспособности в предполагаемом варианте использования, но по-уму такие штуки было бы логично сделать. Но ничего этого ты не увидел, и даже не подумал о них. Всё твоё «ревью» исключительно про то, как этот высер не соответствует твоим представлениям о «стандартах написания кода специалистами по написанию кода на Javascript за деньги». Вот и всё. И именно поэтому - веб катится в страное говно. Никого не интересует что делает код и насколько хорошо он делает то, для чего он собственно и нужен. «Всех» интересует как он написан.

Соответственно, ты и я из совершенно разных миров, где ценятся совершенно разные вещи.

Stanson ★★★★★
() автор топика
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от TDrive

Его уже проще написать с 0 чем читать то что ты написал.

Может быть. Если в итоге требуется не рабочий индикатор, а чтобы код удовлетворял твоему чувству прекрасного, то действительно, проще переписать с нуля.

Но вот ведь какое дело - прекрасного альтернативного кода аналогичной функциональности, размера, простоты и ужора что-то в упор не видно. Есть только мой высер.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от TDrive

Ну и для кого ты в результате это написал?

Для тех, кому надо отображать данные с датчиков.

Что мешает написать gauge?

Ничего. Но зачем это может быть нужно? Ничто не мешает написать и gauge_object_with_settings или там gaugeSettingsObject. Ещё более понятно, но совершенно бессмысленно.

Что мешает написать className?

Потому что это не имя класса. Это имя группы индикаторов. Аттрибут «имя класса» просто используется для совершенно других целей. Точно так же, как и id используется для передачи конфигурации.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

После инициализации id элемента будет иметь значение указанное в id JSON’a для инициализзации. Фронтендеры могут использовать его как обычно.

Зачем если легко обойтись без этого?

Если очень надо будет - то несложно пройтись по этому массиву и найти нужный именно по id.

А если они динамически меняются на странице? как мне стопнуть setInterval( function(){ _.update( u ) }, u.gauges[0].int ); тех датчиков которые пользователь решил пока скрыть?

Иметь 100500 индикаторов на странице - идиотизм

Будешь учить жизни тех кто пользуется твоим кодом?)

Да, нужна. Чтобы создавать индикаторы чисто декларативно.

На оверхед пофиг?

Если нужна будет, например, температура рядом с UPS с другого источника данных, то достаточно просто добавить элемент с нужным классом и настройками в id.

А чем плох вариант с добавлением нового new Gauge(elemen) ?

Что мешает переписать Gauges так, как нужно? Чтобы позволяло? Там же 70 строчек кода всего.

Ничего, просто с 0 написать, да можно. Только код то твой зачем тогда?

Тут на самом деле есть до чего докопаться, на самом деле, как в логике, так и в использовании тех или иных решений, но ты умудрился ничего из этого в упор не увидеть.

Ой ну пиздец) пойду плакать в подушку.

Это не мешает использованию и работоспособности в предполагаемом варианте использования

в предполагаемом варианте использования

ыыыыы

TDrive ★★★★★
()
Ответ на: комментарий от Stanson

Потому что это не имя класса. Это имя группы индикаторов. Аттрибут «имя класса» просто используется для совершенно других целей. Точно так же, как и id используется для передачи конфигурации.

ой все, скулы болят.

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

А если они динамически меняются на странице? как мне стопнуть setInterval( function(){ _.update( u ) }, u.gauges[0].int ); тех датчиков которые пользователь решил пока скрыть?

Блин. А ещё ревьювером назвался. Таймер не на каждый датчик, а на каждый источник. Так что стопать его надо не когда пользователь скрыл датчик, а только когда пользователь скрыл все датчики с одним источником. Это не реализовано, но добавить элементарно.

Будешь учить жизни тех кто пользуется твоим кодом?)

Кому в здравом уме может понадобиться 100 индикаторов на странице? Это просто бессмысленно, человек не способен столько информации воспринять. Вообще, обычно. индикатор нужен чтобы человек взглянув на него сразу понял, всё ли хорошо с отображаемой величиной или нет. Если на странице будет 100 таких индикаторов, то их смысл просто теряется.

На оверхед пофиг?

Оверхед при создании ничтожен. Оверхеда при работе нету. Смысл индикатора - постоянно показывать что-то, а не создаваться-удаляться.

А чем плох вариант с добавлением нового new Gauge(elemen) ?

Тем, что источник данных может быть тот же, что и у других индикаторов. Придётся городить глобальный массив с адресами источников, чтобы избежать ненужных запросов. Вариант вполне годный, на самом деле, но мне захотелось без глобальных переменных. Опять же, переделать - 5 минут.

ыыыыы

Что ыыыы? Это же индикаторы, а не гифки с котиками. Обычно индикаторы всегда включены. Т.е. подключил/установил их и всё. Ты же не выкручиваешь манометр из трубы после того, как на него посмотрел. Он всегда там стоит и показывает текущее значение. Так же и тут.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

Это не реализовано, но добавить элементарно.

Опять же, переделать - 5 минут.

Вебные аналого-цифровые индикаторы. (комментарий)

Какие нахер патчи? Какая стоимость? У вас всех CD/CI головного мозга что-ли?

все пизда моим скулам) завтра весь день буду кашку есть….

TDrive ★★★★★
()
Ответ на: комментарий от TDrive

все пизда моим скулам

Советую почитать с ним другие треды, которые не удалили. Там от теории относительности до ковида, и каждый очень клевый.

anonymous
()
Ответ на: комментарий от TDrive

Ты так ничего и не понял.

Это не либа для энтерапрайза и не новый классный вебдванольный проект. Это даже не образец написания кода на js.

Это, сцуко, индикатор. Есть всякие датчики. То, что они измеряют надо как-то визуализировать. Раньше, для этого использовали аналоговые или цифровые индикаторы, в виде отдельных устройств. Человеки собирали их или покупали и использовали потом десятилетиями. Они не ковырялись ежедневно в этих индикаторах, не перерисовывали каждый день шкалы, не переделывали их раз в неделю. Не обновляли постоянно на новую версию. Нашёл схемку в журнале, собрал - и оно работает. Ну или купил, настроил, прикрутил и всё. Сегодня, для визуализации измеряемого датчиками можно использовать массу всякого барахла в котором есть браузер - ненужные планшеты, мобилки, телевизоры, или просто сделать страничку на которую при необходимости можно заглянуть или держать открытой вкладку. Однако, при этом, всякие мимокрокодилы начинают вопить что-то про то, что эти вебные индикаторы, непременно должны быть масштабируемыми, написанными на правильном диалекте, с использованием каких-то правильных приёмов, постоянно дописываться, обновляться, апгрейдиться, быть заточенными на удобство перманентного переписывания и всё такое. Зачем? Что это за бред, откуда он? Почему аналоговый индикатор не требовал этого бреда, а тут этот бред совершенно необходим? Так вот, этот бред не нужен вообще. Вот тебе «схема» индикатора на жабоскрипте - найди ненужный гаджет, повесь на стенку, допили жабоскрипт для себя и всё - оно будет работать десятилетиями, точно так же как аналоговый или цифровой индикатор в прошлом. Его не надо ни апгрейдить, ни рефакторить, с ним ничего больше не надо делать. Вот в чём суть этого высера. Если ты не способен этого понять - то могу только посочувствовать.

Stanson ★★★★★
() автор топика
Ответ на: комментарий от Stanson

Если не хочется, чтобы твой код обсуждали на лоре - возможно тогда его не надо тут публиковать. Если опубликовал не в своем личном блоге - терпи, все просто.

anonymous
()
Ответ на: комментарий от anonymous

Если не хочется, чтобы твой код обсуждали на лоре - возможно тогда его не надо тут публиковать.

На лоре код обычно не обсуждают, а обсирают. Тем не менее, мне именно это и было нужно. Я умею извлекать пользу из обсирания, вот и тут, я даже подправил одну допущенную глупость по наводке обсирателей. если ты не заметил.

Так что даже от ЛОРа может быть польза. :)

А флейм раздуваемый жабомакаками - это для меня развлекуха, не более. Мне пока что просто прикольно наблюдать за их потугами обосновать своё никчёмное существование.

Stanson ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.