LINUX.ORG.RU

Избранные сообщения arty_bishop

Познание математики будучи тупарём 2

Форум — Talks

на правах тяпницы.

вот вы мне объясните, как так получается:

1+2+3+4+5+….+бесконечность == минус одна двенадцатая.

ну вот как…!?

 

Rastafarra
()

Я познаю мир - квадратные корни и степени - тупак :D

Форум — Talks

Тыкая карандашиком в листочек открыл для себя вотетавот

2^2 -> √4 
3^2 -> √9  -> 9-4   = 5 
4^2 -> √16 -> 16-9  = 7  -> 7-5   = 2
5^2 -> √25 -> 25-16 = 9  -> 9-7   = 2
6^2 -> √36 -> 36-25 = 11 -> 11-9  = 2
7^2 -> √49 -> 49-36 = 13 -> 13-11 = 2
8^2 -> √64 -> 64-49 = 15 -> 15-13 = 2
9^2 -> √81 -> 81-64 = 17 -> 17-15 = 2
и так далее

Например зная что:

864584^2 = 747505493056

То мы знаем что следующее число за 747505493056 равняется (((864584 * 2) +1) + 747505493056) = 747507222225 = 864585^2


Ну или зная две подряд идущие степени например:

4288285225
4288416196

Узнаём их разность 4288416196 - 4288285225 = 130971 и (130971+1) / 2 = 65486 получая:

65485^2 = 4288285225
65486^2 = 4288416196

Ну и также далее легко узнаём чему равно 65487^2 просто к (4288416196 + 130971) + 2 = 4288547169.

  • +2 потому что следующая степень двойки это ряд разностей степеней идущий как n+2 3-5-7-9-11-13….

А позиция этого ряда это разность степеней. А разность степеней это порядковый номер умноженный на 2 плюс 1.

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

    long x = 1;
    long y = 1;
    for (int i = 2; i < 1000000; ++i)
    {
        y+=(x=x+2);
        printf("%li\n",y);
    }

    long y;
    for (long i = 2; i < 1000000; ++i)
    {
        y=i*i;
        printf("%li\n",y);
    }

Cуть то в чём если у нас есть число 468901735696 и мы знаем что это квадратная степень какого-то числа у меня была наивная мысля о том что зная следующее значение степени или предыдущее мы можем очень быстро узнать какое число умноженное само на себя нужно то есть извлечь корень. Как бы да, но узнать быстро без подбора вроде как никак.

Накой хер я тут всё это написал не знаю, просто для себя памятку оставил :D Я с числами вообще на вы и для вас всё это очевидность, но я это всё только что заметил гыгы, ну может будет полезно кому-то не знаю =)

 , , , ,

LINUX-ORG-RU
()

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

Форум — Web-development

По итогам Есть ли что-то типа 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
()

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

Форум — Talks

Что если создать opensource-правительство? Хотя бы на бумаге. В виде конституции, кодексов и законов. Пользователь регистрируется, получает доступ к git документа, регулирующего тот или иной закон несуществующего пока что opensource-государства. К голосованию допущены все зарегавшиеся, партии нинужны, мейнтейнером будет крон. Релиз происходит раз в, скажем, квартал. Можно взять какую-нибудь Швейцарию или Финляндию и тупо форкнуть. Потихоньку-помаленьку и допилим закон в котором будет более-менее компромисс между всеми участниками вышеупомянутого государства.

 , ,

arty_bishop
()

Книги по Android

Форум — Talks

Хочется потихоньку повозиться с Android'ом.

Кто лучше из них пишет?
https://www.piter.com/collection/all/product/android-programmirovanie-dlya-pr...
https://www.piter.com/collection/all/product/android-dlya-razrabotchikov-3-e-...

В чём плюсы и минусы каждой из книг?

Как я понимаю, обе по 6-ой версии Android'а?

 , , ,

Deleted
()

Ситуация с Wayland: факты о X и Wayland.

Новости — Open Source
Группа Open Source

Это вольный перевод статьи, намедни размещённой на phoronix. Оринальная статья — обзор недостатков, их исправлений и преимуществ между X и Wayland. Её написал Eric Griffith, при участии Daniel Stone, специально для ресурса phoronix. Работа собрана по кусочкам из презентаций Keith Packard, David Airlie, Kristian Høgsberg, из страниц про X11, X12, Wayland в вики и на freedesktop.org, из прямых интервью с разработчиками.

Оригинал выпущен под Creative Commons версия 3, с указанием авторства; перевод доступен на тех же условиях (с указанием на авторов оригинала, как мне кажется).

( читать дальше... )

>>> Подробности

 ,

quiet_readonly
()