Pull to refresh
65
0
Send message
Согласен со всеми, что неэффективно, несуразно и так далее. Однако, для старых устройств особого применения больше не видно: что-то управляющее проще на Arduino/RPi сделать, как читалка — слишком плохой экран, как консоль для игр — слишком плохой клик/слабый проц/маленький экран.
Не только с механикой.
Вместо распознавания и датчика движения можно было бы одной RFID-меткой обойтись на ошейнике.

В целом проект напоминает Juicero: технологично и беспощадно.

Есть алгоритм Largest-Triangle-Three-Buckets. Простой, но хорошо аппроксимирует данные для отображения, не удаляя экстремумы.


По моему мнению для TSDB такая функциональность не требуется.

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

Подозреваю, что термины «нейронные сети» и «нейрон» сейчас используется по исторической причине. Достаточно ознакомиться вот с этим материалом, чтобы понять, что искусственная нейронная сеть похожа на реальную, как диснеевский Гуфи на собаку. И именно этот факт надо говорить, а не демонстрировать картинку нейрона.
Объема данных у меня никакого нет — несколько простых железок, опрашиваемых раз в две минуты и всё. Разрабатываемая система мониторинга уровня Cacti, а не Zabbix/Prometheus/Influx.

Задачу выделения аномалий хорошо можно распараллелить, если использовать численные/статистические методы, но чтобы анализировать скажем 150К/с это уже надо делать балансировщики и сопутствующую архитектуру. Но даже в этом случае придется переписать все расчеты на низкоуровневые языки. R, Python и, используемый мной, Java Script — слишком медленные для такого.
1. В русскоязычных материалах термин «совместные» вроде не встречал (да и в целом не так её и много просмотрел). Да, наверно можно и свертку сделать, у меня просто проблема в нехватке знаний :(

2. Аппроксимировал своим методом. Аппроксимация мои методом близка к исходному ряду, если будет аппроксимироваться не достаточно сглаженный ряд. Возможно можно использовать какой то параметр гладкости внутри метода, чтобы так не промахиваться.
Метод наверняка так себе, поскольку мне оказалось проще придумать своё, нежели использовать готовое. Через язык статей, тому кто в этой теме не постоянно, прорываться очень сложно.
Я пока только присматриваюсь к нейронным сетям, которые показывают впечатляющие результаты, так что не очень представляю как и что там работает. Сейчас книгу начал читать по азам, вдохновившись вот этой статьей.
Prophet я видел, но не стал в обзор, поскольку как я понял, у них больше прогнозирование. В целом, если хочется учитывать праздничную составляющую из коробки, то да, можно им воспользоваться. Тут вопрос насколько это будет быстро.
Можно попробовать искусственно ограничить поле обзора полупрозрачным цилиндром (на глаза) с нанесенной координатной сеткой для отслеживания ориентации. По идее, в этом случае человек будет стремиться повернуть голову, а заодно и цилиндр, в направлении интересующего его объекта. Полупрозрачность требуется, чтобы можно было догадаться, что там происходит что-то заслуживающее внимания.
Если чат-бот крутится на что-то подобном Raspberry Pi, имеющем GPIO, то можно было бы добавить PIR-датчик и датчик открытия двери, и писать видео по их срабатыванию. Мне кажется это более надежным, чем обработка видео-потока.
Немного поразмыслив над приведенной метрикой, мне кажется, что вы обучили нейронную сетку обнаруживать не аномалии, а зашумленные участки.

Возможно стоит попробовать сымитировать модель мозга, упоминаемую Хокинсом в книге «Об интеллекте»: сенсорные сигналы поступают в локализованные участки, а потом агрегируются и передаются уже дальше, напр. информация с нейронов сетчатки сперва обрабатывается в участках затылочных долей, которые специализируются на выделении вертикальных-косых-горизонтальных линий и других примитивов, а только затем передается дальше в участки «принятия решений и прогнозирования». В данном случае, каждый специализированный участок можно попробовать обучить отдельным статистическим методам, подключив R. А итоговую сеть обучать уже на их итоговых результатах.
Стрелочные функции уже давно завезли в браузеры. А forEach и reduce, еще раньше.
Операции с массивами принципиально не используете?
// Вместо
let totalPrice = 0;
for(let i = 0; i < prices.result.length; i++){
totalPrice += prices.result[i].price;
}

// Просто
let totalPrice = 0;
prices.result.forEach((item) => totalPrice += item.price);

// Или чуть более изысканно
let totalPrice = prices.result.reduce((total, item) => total + item.price, 0);


Выглядит прямо как в php.

Имхо, это не тот идеал, на который надо ровняться.

Пока callback-ами обхожусь, но надо конечно переходить на async.
По мне лучше была бы одна схема вместо тысячи фотографий.
Ага, нашел. По мне конечно так себе аргумент, что при ходьбе пользоваться нельзя. При ходьбе у рук задача обычно поддерживать равновесие, а не хватать.
А что если использовать не мускульный датчик, который весьма капризен и требует обучения, а джойстики, управляемые пальцами ног?

Для регулировки силы сжатия можно использовать светодиоды/экранчик или вибромоторы.
Об использовании аномалий при мониторинге интересная статья у Мейл.ру была. В их блоге еще есть, но эта, по мне, — самая впечатляющая.
Увы, нет :(

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

На рынке систем мониторинга уже начинают почесываться, напр. DataDog предлагает свой алгоритм, правда на основе статистики, у Prometheus то же похоже что-то есть. Популярный Zabbix в этом плане в аутсайдерах.

Между тем кто-то даже целый бизнес на поиске аномалий строит.
Эх, думал будет результат повеселее. Разве средняя нагрузка в норме такого иметь не может?

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

Как мне кажется, если бы вы смогли выявлять аномалии в данных мониторинга, то в таком случае надо уже выпускать коробочный продукт.
Заодно: перевод слов по двойному клику для Firefox/GreaseMonkey, используя LingvoLeo
// ==UserScript==
// @name        MyScript
// @namespace   Translate
// @description Linvaleo
// @version     1
// @grant GM_xmlhttpRequest
// ==/UserScript==
(function (window, undefined) {
	var w = (typeof unsafeWindow != undefined) ? unsafeWindow : window;

	if (w.self != w.top)
		return;
	
	var hint = document.createElement('div');
	hint.id = 'lingualeo-hint';
	hint.style.position = 'fixed';
	hint.style.background = 'white';	
	hint.style.padding = '20px';
	hint.style.fontSize = '14pt';
	hint.style.cursor = 'default';
	hint.style.border = '1px solid #bbb';
	hint.style.display = 'none';
	hint.onmouseleave = () => hint.style.display = 'none';
	document.body.appendChild(hint);
	
	var words = {};
	
	function translate (word, callback) {
		var data = words[word];
		if (data)
			return callback(null, data);

		GM_xmlhttpRequest({
			method: 'GET',
			url: 'http://lingualeo.com/userdict3/getTranslations?word_value=' + word + '&groupId=&_=' + new Date().getTime(),
			onload: function(response) { 
				try {
					data = JSON.parse(response.responseText).userdict3;
					data.audio = new Audio(data.sound_url);
					words[word] = data;
					callback(null, data);
				} catch (err)  {
					callback(err);
				}
			}
		});
	}	
	
	document.ondblclick = function (event) {
		var selection = window.getSelection();		
		var word = selection.toString().trim();
		
		if (!word)
			return;		
		
		translate(word, function(err, data) {
			if (err)			
				return console.error(err);
			
			var html = [];
			if (data.transcription) 
				html.push('<i>' + data.transcription + '</i>');
			if (data.translations instanceof Array) 
				data.translations.forEach((t) => html.push(t.translate_value));
			hint.innerHTML = html.join('<br>');
			
			hint.style.top = event.clientY - 5 + 'px';
			hint.style.left = event.clientX - 5 + 'px';
			hint.style.display = 'block';
			
			data.audio.play();
			selection.removeAllRanges();			
		});
	  }
})(window);


Information

Rating
3,544-th
Registered
Activity