Познание математики будучи тупарём 2
на правах тяпницы.
вот вы мне объясните, как так получается:
1+2+3+4+5+….+бесконечность == минус одна двенадцатая.
ну вот как…!?
на правах тяпницы.
вот вы мне объясните, как так получается:
1+2+3+4+5+….+бесконечность == минус одна двенадцатая.
ну вот как…!?
Тыкая карандашиком в листочек открыл для себя вотетавот
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 плюс 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 Я с числами вообще на вы и для вас всё это очевидность, но я это всё только что заметил гыгы, ну может будет полезно кому-то не знаю =)
По итогам Есть ли что-то типа 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
Что если создать opensource-правительство? Хотя бы на бумаге. В виде конституции, кодексов и законов. Пользователь регистрируется, получает доступ к git документа, регулирующего тот или иной закон несуществующего пока что opensource-государства. К голосованию допущены все зарегавшиеся, партии нинужны, мейнтейнером будет крон. Релиз происходит раз в, скажем, квартал. Можно взять какую-нибудь Швейцарию или Финляндию и тупо форкнуть. Потихоньку-помаленьку и допилим закон в котором будет более-менее компромисс между всеми участниками вышеупомянутого государства.
Хочется потихоньку повозиться с 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'а?
Это вольный перевод статьи, намедни размещённой на phoronix. Оринальная статья — обзор недостатков, их исправлений и преимуществ между X и Wayland. Её написал Eric Griffith, при участии Daniel Stone, специально для ресурса phoronix. Работа собрана по кусочкам из презентаций Keith Packard, David Airlie, Kristian Høgsberg, из страниц про X11, X12, Wayland в вики и на freedesktop.org, из прямых интервью с разработчиками.
Оригинал выпущен под Creative Commons версия 3, с указанием авторства; перевод доступен на тех же условиях (с указанием на авторов оригинала, как мне кажется).
( читать дальше... )
>>> Подробности