Как стать автором
Поиск
Написать публикацию
Обновить
0
@olegsastrunread⁠-⁠only

Пользователь

Отправить сообщение

WiFi колонка/плеер на базе Orange Pi Zero или история о потерянном времени

Время на прочтение7 мин
Количество просмотров48K
Доброго дня уважаемым хабровчанам!

Предыстория


История моя началась с того, что по просьбе одного друга нужно было сделать небольшое программируемое устройство с выводом звука и GPIO. Давно хотел поработать с каким-либо одноплатником *Pi и потому сразу решил делать на чем-то подобном (результат + опыт). Друг почти сразу отказался от предложенного проекта, ну а я оказался с купленной платой OrangePi Zero. Некоторое время провалялась она без дела, пока не отдали мне старый МФУ Canon MX320 без поддержки сети. Мне очень не хотелось иметь лишний провод от ноутбука к принтеру, и в результате апельсинка была извлечена, настроена и работает с тех пор в качестве CUPS сервера по USB (результат, кстати, хороший, но это уже совсем другая история).

Завязка


Однажды надоело мне вечно подключать через minijack мой телефон к колонкам. Стоят они хорошо, удобно, и переносить их неохота. А телефон, вечно висящий на линейнике- это уже не мобильный телефон, а что-то похожее на старые проводные аппараты. Ноутбук у меня тоже стоит так, что подключать к нему кабель к колонкам было бы неудобно. Да и сама машинка старая (10 лет уже), лишний аудиоплеер — лишняя нагрузка.

Можно, конечно же, купить bluetooth-колонки. Или bluetooth-адаптер. Но это значит малый радиус действия и проигрывание музыки только на том устройстве, с которым по bluetooth связан телефон. Надо что-то посерьезнее. «Здорово было бы повесить такой сервер на апельсинку, который мог бы принимать аудиопоток с смартфона по WiFi, — подумал я, — ведь она постоянно подсоединена по ethernet к роутеру, малонагружена (так как стоит на ней Ubuntu Server 16.04), разместить можно удобно, электричества потребляет мало.» Сказано — сделано.
Читать дальше →

«Привет, Siri. Включи обогреватели» — Интеграция умного дома на базе NooLite с Apple HomeKit

Время на прочтение12 мин
Количество просмотров43K
image

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


С выходом iOS 10, Apple представила пользователям приложение Дом — свою реализацию интерфейса управления умным домом через HomeKit. Меня весьма заинтересовала данная тема и, потратив несколько вечеров на изучение доступного материала, я решил реализовать интеграцию данного продукта с моей системой. В статье я подробно изложу процесс ее установки и настройки, а также поделюсь видео с результатами того, что получилось в итоге.

Orange Pi на автомойке ч.3

Время на прочтение2 мин
Количество просмотров21K
Продолжение статей Arduino на автомойке и Arduino на автомойке ч.2.


Как понятно из заголовка перешли на использование Orange Pi One. Машинка гораздо поинтереснее Arduino. Выбран среди себе подобных в основном из-за цены. По сравнению в Arduino лучше решает следующие задачи:

— сеть (проблем пока нет)
— подключение монитора вместо табло
— возможность использования тач-панели
— возможность использования базы данных
— возможность установки на «себя» веб-сервера
Читать дальше →

Умное цветоводство, или Пусти ИТ-шника в огород… Часть 1

Время на прочтение4 мин
Количество просмотров12K
Друзья, сегодня пятница! Самое время вспомнить о делах домашних…И тут пытливый ум ИТшника тоже найдет благодатную почву для оптимизации. Собственно о почве и братьях наших зеленых мы и поговорим.

Недавно у нас в офисе появился необычный, но очень полезный девайс – автополивщик для растений. Настоящая умная система в отдельно взятом цветочном горшке. Первым подопытным стал фикус. И, судя по его упитанности, он остался доволен. ;)

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

Читать дальше →

SqlBulkCopy — безбашенная загрузка больших данных или как оседлать дикую лошадь (C#)

Время на прочтение8 мин
Количество просмотров44K

SqlBulkCopy — это эффективное решение для массовой загрузки данных в таблицы Microsoft SQL Server. Источник данных может быть любой, будь то xml-файл, csv-файл или другая СУБД, например MySQL. Достаточно получить из источника данные в виде объекта DataTable или реализовать интерфейс IDataReader поверх методов доступа к данным.

Вам не придется создавать файлы на диске для дальнейшей их загрузки с помощью утилиты BCP, вам не придется писать код для генерации множественных INSERT запросов. При загрузке данных SqlBulkCopy работает на более низком уровне, позволяя вставлять миллионы записей за максимально короткий срок.
Читать дальше →

Распознавание речи с помощью CMU Sphinx

Время на прочтение4 мин
Количество просмотров85K
CMU Sphinx сейчас является крупнейшим проектом по распознаванию человеческой речи. В инструментарий входят следующие программы и библиотеки:

  • Pocketsphinx — небольшая программа, которая принимает на вход произвольные акустические модели, грамматики и словари, а также звуковой поток(либо звуковой файл, либо сам берет поток с микрофона). На выходе получается распознанный текст. Написана на C, работает быстро.
  • Sphinxbase — библиотека необходимая для работы Pocketsphinx
  • Sphinx4 — гибкая библиотека для распознавания, написана на Java.
  • Sphinxtrain — программа для обучения акустических моделей.

Для работы со CMU Sphinx важно запомнить несколько определений и понять их отличия.

  • Акустическая модель — отвечает за сопоставление звуку произнесенной фонемы. Акустическую модель для русского языка можно скачать на сайте проекта. Русская акустическая и языковая модели. А также словарь.
  • Словарь — это файл, в котором написаны сопоставлены лексемы и фонемы (слово и его транскрипция). Например, калькулятор (k ay ll k u ll ja t ay r). Он необходим для преобразования фонем, распознанных акустической моделью в лексемы.
  • Грамматика — это формальные правила, которые описывают простые правила построения предложений. Лексемы, полученные на предыдущем шаге пытаются сопоставиться с грамматикой и если удачно, то выводится результат.
  • Языковая модель — это статистическая модель языка. Она описывает вероятности слов и их комбинаций. Таким образом распознавание лексем — это максимизация правдоподобности распознанной фразы.

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

Pocketsphinx. Распознавание речи и голосовое управление в Linux

Время на прочтение11 мин
Количество просмотров126K
— Всё в порядке, Лёня?
Динамики отрегулированы на максимум, я морщусь, отвечаю:
— Да. Тише звук.
— Звук — тише, — соглашается «Виндоус-Хоум», — тише, тише…
— Хватит, Вика
С.Лукьяненко, «Лабиринт отражений»

Введение


В 1997-ом году Лукьяненко пророчил для десктопа сочетание CLI и голосового управления. Однако сейчас голосовое управление — достаточно узкая ниша.
Голосовое управление — взаимодействие с устройством при помощи звуковых команд. Не путайте это понятие с распознаванием речи. Для голосового управления достаточно, чтобы устройство реагировало на единственную нужную команду (ведь ваша собака не может работать машинисткой?). Распознавание речи — гораздо более глобальная проблема: в этом случае устройство должно преобразовывать в текстовый формат все слова, произнесенные вами. Как легко догадаться, распознавание речи на данный момент реализовано поверхностно относительно человеческих возможностей.
Функционал, рассмотренный в статье, может быть применен, к примеру, для организации модного сейчас «умного дома» или просто управления компьютером. Честно говоря, для описания управления компьютером хватило бы пары абзацев, но я попытаюсь показать вам основы работы с CMU Sphinx.
Кстати, процентов 70 описанного здесь подойдет и пользователям Windows.
Научим Linux слушаться?

Контроллер аудио мультирума MR-01

Время на прочтение4 мин
Количество просмотров9.5K
В настоящее время звук и видео в каждой комнате переходят из разряда роскоши в категорию дополнительного удобства.
Для того, чтобы избежать необходимости установки комплекта мультимедийного оборудования в каждой комнате, используются системы «мультирум».
Мультирум — это мультимедийная система распределения аудио и видеосигналов в некотором помещении или за его пределами. Является дополнением к системе умного дома. Обычно используется в квартирах, частных домах или других помещениях с большим количеством комнат. [Wikipedia]
Пользователь получает возможность переключать источники сигнала в разные комнаты как вручную, так и по определенным сценариям в автоматизированном режиме.

В данной статье речь пойдёт о нашей разработке для «умного дома» — контроллере аудио мультирума MR-01.



Статья носит ознакомительный характер и в ней не рассматриваются электрическая схема и код прошивки.
Читать дальше - Осторожно! Много картинок.

Умный дом. Начало

Время на прочтение3 мин
Количество просмотров15K
Привет, Гиктаймс!
Интерес к «умным домам» появился у меня еще во время обучения в университете, в 2004 году, когда меня не заинтересовали предложенные кафедрой темы дипломных работ. И мы с другом предложили заведующему кафедрой свою тему: «Разработка программно-аппаратного комплекса 'Умный дом'».

Сказать, что я тогда знал слишком мало об умных домах — не сказать ничего.
Меня привлекало само название «Умный дом». Для меня это было какое-то таинство, нечто магическое.

image

Собранный во время выполнения дипломной работы наш «умный дом» умел мало:
  • Обнаружение проникновения в квартиру/дом в режиме охраны.
  • Управление освещением в полуавтоматическом режиме (учитывались показания датчиков движения, времени суток и предустановленных шаблонов).
  • Определение протечки воды в ванной и на кухне.
  • Голосовые оповещения с использованием звуковой карты компьютера и голосового движка.
  • Уведомление по смс хозяина дома о ключевых событиях (протечка воды, проникновение в дом, отсутствие напряжения 220В).
Читать дальше →

Мой опыт создания «без умного» дома

Время на прочтение16 мин
Количество просмотров96K
Пришло и мое время поделится своим опытом создания «без умного» дома. Вступать в полемику, что же все таки такое умный дом и что он должен уметь делать, не очень хочется. В моем случае будем приручать wifi модули Sonoff от компании ITEAD и учиться включать/выключать «нагрузку» с телефона. В публикации пойдет речь, как прошить модуль, подключим к модулю сенсор температуры/влажности, научимся управлять модулем через приложение HomeKit («Дом») и Siri. Добавим ко всему этому систему управления умным домом Domoticz на raspberry pi. Добавим wifi к кофемашине и научим Siri открывать домофон.
Читать дальше →

Протокол MQTT и открытый проект клиента MQTT на Delphi

Время на прочтение7 мин
Количество просмотров44K

Протокол MQTT применяется для обмена сообщениями в интернете вещей. Интересен прежде всего тем, что поддерживается крупнейшими провайдерами облачных сервисов, такими как IBM, Microsoft, Amazon.
Можно бесплатно получить аккаунт в этих сервисах, настроить там службу приема MQTT сообщений и наблюдать через эти сервисы за жизнью своих устройств, например, в умном доме. Также через эти сервисы устройства могут общаться между собой.

Демонстрация подключения клиента к службе MQTT облака IBM Bluemix прилагается.

Читать дальше →

Применение SpeechKit Cloud API для озвучивания погоды и новостей от Yandex

Время на прочтение9 мин
Количество просмотров14K
Добрый день! В данной статье хотелось бы рассказать о том, как можно сделать на сайте «Голосовой погодный и новостной информер», который бы, например при выборе города не только показывал, но и рассказывал фактический прогноз погоды, а так же произвольную новость. На самом деле этот скрипт разрабатывался для информирования в системе «Умный Дом», но может быть с легкостью переделан под любой сайт, имеющий на хостинге поддержку PHP, что и было сделано для этой статьи. В примере для синтеза речи, будет использоваться технология SpeechKit Cloud API от компании Yandex и XML парсер Yandex погоды и новостей, написанные на PHP.

Что понадобится для реализации:
  • Web сервер с поддержкой PHP (можно локальный типа Денвера).
  • Ключ Yandex SpeechKit (для некоммерческих проектов можно получить бесплатно).
  • Если ключ не дают без наличия у Вас сайта, то создать сайт можно на Hostinger.ru.
  • Список ID городов.

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

Принцип работы:
  • Отправляем запрос на получение mp3 файла, для выбранного города.
  • Парсим XML файл, получая необходимые параметры.
  • Корректируем окончания слов, для постановки правильного произношения.
  • Устанавливаем параметры генерации mp3 файла (голос, тембр, формат файла, язык, текст).
  • Генерируем mp3 файл.
  • Создаем объект Audio HTML 5 и воспроизводим файл.

Скрипт с формой для выбора городов index.html
<!DOCTYPE html>
<html lang="ru">
<head>
<title>Тест SpeechKit Cloud API от компании Yandex.</title>
<meta charset="utf-8">
</head>
<body>
<script language="javascript" type="text/javascript">
function Get_Weather()
{
   var tts_text=document.getElementById('weather').value;
   console.log(tts_text);
	var response="weather.php?&q="+encodeURI(tts_text); //путь до mp3 файла
	var audio = document.getElementById("gameMusic");
		if (audio)
		{
			audio.parentNode.removeChild(audio);
		}
	
		// создаём новый элемент audio
		audio = document.createElement("audio");
		audio.setAttribute("id", "gameMusic");
		audio.setAttribute("autoplay", "true");
		//audio.setAttribute("loop", "false");
	
		var mp3 = document.createElement("source");
		mp3.setAttribute("src", response);
		mp3.setAttribute("type", "audio/mpeg");
	
		audio.appendChild(mp3);
		audio.play();
		document.body.appendChild(audio);
}
function Get_News()
{
   var tts_text=document.getElementById('news').value;
   console.log(tts_text);
	var response="news.php?&q="+encodeURI(tts_text); //путь до mp3 файла
	var audio = document.getElementById("gameMusic");
		if (audio)
		{
			audio.parentNode.removeChild(audio);
		}
	
		// создаём новый элемент audio
		audio = document.createElement("audio");
		audio.setAttribute("id", "gameMusic");
		audio.setAttribute("autoplay", "true");
		//audio.setAttribute("loop", "false");
	
		var mp3 = document.createElement("source");
		mp3.setAttribute("src", response);
		mp3.setAttribute("type", "audio/mpeg");
	
		audio.appendChild(mp3);
		audio.play();
		document.body.appendChild(audio);
}
</script>
<h1><span>Тест SpeechKit Cloud API от компании Yandex.</span></h1>
<h2>Погода</h2>
<select size="1" onclick="Get_Weather();" id="weather"> 
			 <option disabled>Выберите город</option> 
			 <option value="27612">Москва</option> 
			 <option value="34880">Астрахань</option>
			 <option value="26063">Санкт-Петербург</option>
			 <option value="25913">Магадан</option>
</select>
<h2>Новости</h2>
<select size="1" onclick="Get_News();" id="news"> 
			 <option disabled>Выберите город</option> 
			 <option selected value="Astrakhan">Астрахань</option> 
				<option  value="Volgograd">Волгоград</option>
				<option  value="Krasnodar">Краснодар</option>				
				<option  value="Moscow">Москва</option>
				<option  value="Saratov">Саратов</option>
</select>
</body>
</html>


Горда можно добавлять путём установки новых параметров option в элементе select.

Скрипт генерации mp3 файла для погоды weather.php
<?php
	 $id=$_GET["q"]; // id города
	 $url="http://export.yandex.ru/weather-ng/forecasts/".$id.".xml"; // url xml файла 
    $xml = simplexml_load_file($url); // интерпретируем XML-файл в объект
    //параметры:
    $city=$xml['city']; //город
    $temp=$xml->fact->temperature; // температура
    $weather_type=$xml->fact->weather_type; // тип погоды
    $humidity=$xml->fact->humidity; // влажность
    $wind_direction=$xml->fact->wind_direction; // направление ветра
    $wind_speed=$xml->fact->wind_speed; // скорость ветра
    $pressure=$xml->fact->pressure; // давление
       
   
	$znak="плюс";
	if($wind_direction=="e") {	$wind_direction_text="восточный";}
	if($wind_direction=="w") {	$wind_direction_text="западный";}
	if($wind_direction=="s") {	$wind_direction_text="южный";}
	if($wind_direction=="n") {	$wind_direction_text="северный";}
	if($wind_direction=="se") {	$wind_direction_text="юго-восточный";}
	if($wind_direction=="ne") {	$wind_direction_text="северо-восточный";} 
	if($wind_direction=="sw") {	$wind_direction_text="юго-западный";}
	if($wind_direction=="nw") {	$wind_direction_text="северо-западный";} 
												
	$minus_arry=preg_match("/(-)/", $temp, $minus_out);
	if (!empty($minus_out[1]))
	{ $znak="минус";
		$temp=str_replace("-","",$temp);
	}
							
	 //градус
  	if(	$temp=="1" or $temp=="21" or $temp=="31" or $temp=="41" or $temp=="51" or $temp=="61" or $temp=="71" or $temp=="81" or $temp=="91" or $temp=="101") 
  	{
  			$text="градус";
  	} 
  	else 
  	{
	//градуса	
  	if(   $temp=="2"  or $temp=="3"  or $temp=="4"
  			or $temp=="22" or $temp=="23" or $temp=="24" 
  			or $temp=="32" or $temp=="33" or $temp=="34" 
  			or $temp=="42" or $temp=="43" or $temp=="44" 
  			or $temp=="52" or $temp=="53" or $temp=="54"
  			or $temp=="62" or $temp=="63" or $temp=="64" 
  			or $temp=="72" or $temp=="73" or $temp=="74" 
  			or $temp=="82" or $temp=="83"	or $temp=="84" 
  			or $temp=="92" or $temp=="93" or $temp=="94"
  			or $temp=="102" or $temp=="103"
  		) {$text="градуса";} else {$text="градусов";}  											
  						
  	}
  									
  									
  									
  	//процент
  			
  	if(	$humidity=="1" or $humidity=="21" or $humidity=="31" or $humidity=="41" or $humidity=="51" or $humidity=="61" or $humidity=="71" or $humidity=="81" or $humidity=="91" or $humidity=="101") 
  	{
  		$humidity_text="процент";
  	} 
  	else 
  	{
		//процента	
  		if(   $humidity=="2"  or $humidity=="3"  or $humidity=="4"
  				or $humidity=="22" or $humidity=="23" or $humidity=="24" 
  				or $humidity=="32" or $humidity=="33" or $humidity=="34" 
  				or $humidity=="42" or $humidity=="43" or $humidity=="44" 
  				or $humidity=="52" or $humidity=="53" or $humidity=="54"
  				or $humidity=="62" or $humidity=="63" or $humidity=="64" 
  				or $humidity=="72" or $humidity=="73" or $humidity=="74" 
  				or $humidity=="82" or $humidity=="83" or $humidity=="84" 
  				or $humidity=="92" or $humidity=="93" or $humidity=="94"
  				or $humidity=="102" or $humidity=="103"
  		) {$humidity_text="процента";} else {$humidity_text="процентов";}  											
  								
  	}	
  									
  									
  	 //миллиметр
  	if(	$pressure=="701" or $pressure=="721" or $pressure=="731" or $pressure=="741" or $pressure=="751" or $pressure=="761" or $pressure=="771" or $pressure=="781" or $pressure=="791" or $pressure=="801") 
  	{
  		$pressure_text="милиметр ртутного столба";
  	} 
  	else 
  	{
		//миллиметра	
  		if(   $pressure=="702" or $pressure=="703" or $pressure=="704"
  				or $pressure=="722" or $pressure=="723" or $pressure=="724" 
  				or $pressure=="732" or $pressure=="733" or $pressure=="734" 
  				or $pressure=="742" or $pressure=="743" or $pressure=="744" 
  				or $pressure=="752" or $pressure=="753" or $pressure=="754"
  				or $pressure=="762" or $pressure=="763" or $pressure=="764" 
  				or $pressure=="772" or $pressure=="773" or $pressure=="774" 
  				or $pressure=="782" or $pressure=="783" or $pressure=="784" 
  				or $pressure=="792" or $pressure=="793" or $pressure=="794"
  				or $pressure=="802" or $pressure=="803"
  			) {$pressure_text="милиметра ртутного столба";} else {$pressure_text="милиметров ртутного столба";}  											
  							
  	}
  	$say_text="Сейчас в городе ".$city." ".$weather_type.". Tемпература воздуха ".$znak." ".$temp." ".$text.". Влажность ".$humidity." ".$humidity_text.". Ветер ".$wind_direction_text." ".$wind_speed." метров в секунду. Атмосферное давление ".$pressure." ".$pressure_text." !";
	$qs = http_build_query(array("format" => "mp3","lang" => "ru-RU","speaker" => "jane","key" => "SpeechKit_Cloud_API_Key","emotion" => "good", "text" => $say_text)); // параметры запроса
	$ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer: \r\n")));
	$soundfile = file_get_contents("https://tts.voicetech.yandex.net/generate?".$qs, false, $ctx); // запрос на генерацию mp3 файла
 	echo($soundfile);
?>


В скрипте нужно изменить SpeechKit_Cloud_API_Key на полученный Вами ключ.
Скрипт генерации mp3 файла для новостей news.php
<?php
$city=$_GET['q'];
	 
$data_file="http://news.yandex.ru/".$city."/index.rss"; // адрес xml файла 
$xml = simplexml_load_file($data_file); // раскладываем xml на массив

$number= rand(1,13); //генерируем порядковый номер новости

$news=$xml->channel->item[$number]->description; //новость
$title=$xml->channel->item[$number]->title; //заголовок
    

$content_news = trim(preg_replace('/\s{2,}/', ' ', $news));//удаляем весь хлам
$content_title = trim(preg_replace('/\s{2,}/', ' ', $title));//удаляем весь хлам

$text=$content_title." - ".$content_news;
$search = array('"','"',' ',')','(');
$replace   = array('');

$text = str_replace($search, $replace, $text);
$qs = http_build_query(array("format" => "mp3","lang" => "ru-RU","speaker" => "jane","key" => "SpeechKit_Cloud_API_Key","emotion" => "good", "text" => $text)); // параметры запроса
$ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer: \r\n")));
$soundfile = file_get_contents("https://tts.voicetech.yandex.net/generate?".$qs, false, $ctx); // запрос на генерацию mp3 файла
echo($soundfile);    
?>


Читать дальше →

«Умный дом» собственными руками. Часть 3. Синтез и распознавание голоса с помощью Google

Время на прочтение9 мин
Количество просмотров83K
В прошлой статье мы смогли добиться получения изображения с наших веб-камер в виде снимков раз в секунду. Теперь пришла пора взяться за обещанное — распознавание и синтез голоса.
Читать дальше →

Упрощаем резервное копирование и восстановление с помощью HPE StoreOnce RMC

Время на прочтение7 мин
Количество просмотров18K
Сколько стоит один час внепланового простоя в вашей организации? Согласно исследованиям компании Gartner, в среднем по отраслям стоимость одной минуты составляет $5600. Эти цифры говорят о том, что приложения вашей организации необходимо защищать и резервное копирование играет ключевую роль в построении бизнеса без простоев и в выдерживании заданного соглашения об уровне обслуживания (SLA). Иначе… Иначе ожидайте чего-то белого и пушистого :)


Читать дальше →

OneNote 2013, или Как привести дела в порядок

Время на прочтение5 мин
Количество просмотров91K


«Возьми себя в руки, тряпка!» — сказал я себе, когда понял, что работа скоро доконает. Или она тебя, или ты её.

Дорога в тысячу ли начинается с первого шага.
Первым шагом стала книга Дэвида Аллена «Как привести дела в порядок: искусство продуктивности без стресса». Точки над i расставил курс Максима Дорофеева «Джедайская техника пустого инбокса, или Как доводить дела до конца».
 
Нельзя питать иллюзий, ступив на тропу войны. Проблемы не заставили себя долго ждать. Работа на компьютере требовала автоматизации. Дело стало за малым, поиск подходящего программного обеспечения для Getting Things Done (GTD).

Бесконечные пробы GTD-программ не принесли счастья. Комфортной работе мешало большое количество данных.
Не получалось связать задачи и данные внутри одной GTD-программы. Поток писем складировался в Outlook, документы и другие файлы на диске, часть информации на web ресурсах и так далее. Решая дела, приходилось тратить время на поиск связанных с ними данных. Возникали проблемы с синхронизацией информации на разных устройствах и многое другое.
 
Но кто ищет, тот всегда найдёт! Выходом из патовой ситуации оказался Microsoft OneNote 2013, который простыми настройками легко превратился в полноценный GTD-инструмент. Только такой подход позволил преодолеть все проблемы и ощутить комфорт от использования GTD.
Читать дальше →

Защита .NET приложений — всё же, во что заворачивать селёдку?

Время на прочтение9 мин
Количество просмотров28K

Защита .NET приложений — всё же, во что заворачивать селёдку?



В пику вот этому обзору. Решил написать собственный обзор обфускаторов, ибо считаю вышеобозначенный не только поверхностным, но и вводящим в заблуждение.
Актуален один вопрос — так ли хорошо защищает тот или иной продукт от снятия защиты? Учитывая, что производители обфускаторов честно предупреждают — сборка остается дизассемблируемой. И это краеугольный камень проблемы защиты .Net приложений. Тотальная защита приводит к неудобствам запуска сборки в разных средах, обфускация — к условной открытости кода. Остается решать задачу по усложнению получения кода, его читабельности и снятию защиты.

Итак, что мы имеем:
Читать дальше →

Как определить местоположение по сетям сотовой связи (Cell ID)

Время на прочтение4 мин
Количество просмотров310K

Карта Участники OpenStreetMap
 
Существует множество способов определения местоположения, такие как спутниковая навигация (GPS), местоположение по беспроводным сетям WiFi и по сетям сотовой связи.
 
В данном посте мы попытались проверить, насколько хорошо работает технология определения местоположения по вышкам сотовой связи в городе Минске (при условии использования только открытых баз данных координат передатчиков GSM).
 
Принцип действия заключается в том, что сотовый телефон (или модуль сотовой связи) знает, каким приемопередатчиком базовой станции он обслуживается и имея базу данных координат передатчиков базовой станции можно приблизительно определить своё местоположение.
Читать дальше →

Программируем управление освещением по датчикам движения и освещения на Node-RED

Время на прочтение16 мин
Количество просмотров94K
В русскоязычном интернете пока мало статей о такой среде программирования как Node-RED. Данная статья приоткроет тайну завесы об этом продукте и покажет на примере создания алгоритма управления освещением по датчикам движения как просто с помощью Node-RED можно реализовать различные сценарии и правила автоматизации умного дома в полностью в графическом виде без написания какого-либо кода.


Читать дальше →

На всякий пожарный: полезные Live CD/USB для аварийного запуска компьютера

Время на прочтение6 мин
Количество просмотров647K
Привет, Гиктаймс! Крайние меры на то и крайние, чтобы обращаться к ним из отчаяния. Поэтому даже в том случае, когда у компьютера «поехала крыша», есть вариант починить его без полной переустановки системы. Сегодня мы поговорим о загрузочных флэшках и рассмотрим простые очевидные наборы для работы с ПК «на лету».

Читать дальше →

Многоканальный программный ШИМ в AVR

Время на прочтение5 мин
Количество просмотров136K
Что такое ШИМ и как он работает особо подробно расписывать не буду, информацию без труда найдёте на просторах интернета. Коснусь лишь общих понятий. ШИМ — это Широтно-Импульсная Модуляция, (по-английски PWM — Pulse Width Modulation) уже из самого названия ясно, что здесь что-то связанное с импульсами и их шириной. Если изменять ширину (длительность) импульсов постоянной частоты, то можно управлять, например, яркостью источника света, скоростью вращения вала электродвигателя или температурой какого-либо нагревательного элемента. Обычно, именно с помощью ШИМ микроконтроллер управляет подобной нагрузкой. Микроконтроллеры имеют аппаратную реализацию ШИМ, но, к сожалению, количество аппаратных ШИМ-каналов ограничено, например, в AТmega88 их аж шесть штук, в ATtiny2313 — четыре, в ATmega8 — три, а в ATtiny13 только два. В AVR ШИМ-каналы используют таймеры и их регистры сравнения OCRxx. Изменяя их содержимое и задавая параметры таймеров, в зависимости от задач, можно управлять состоянием, связанного с регистром, выхода — подавать на него 1 либо 0. То же самое можно организовать программно, управляя любым выводом контроллера, а главное, реализовать большее количество ШИМ-каналов, чем имеется на борту аппаратных. Практически, количество каналов ограничено лишь количеством ножек-выводов микроконтроллера (по крайней мере, если говорить о семействах Mega или Tiny). Как оказалось, алгоритм довольно прост, но у меня ушло некоторое время на его понимание и полное осознание.
Читать дальше →

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность