<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Около программистский блог</title>
	<atom:link href="http://yahnev.ru/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://yahnev.ru</link>
	<description>Находки, мысли и решения</description>
	<lastBuildDate>Tue, 21 Feb 2017 19:48:58 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.8.2</generator>
	<item>
		<title>Что можно найти, если сделать реверс-инжиниринг 16 тысяч Android-приложений</title>
		<link>http://yahnev.ru/?p=4402</link>
		<comments>http://yahnev.ru/?p=4402#respond</comments>
		<pubDate>Tue, 21 Feb 2017 19:48:58 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Безопасность]]></category>

		<guid isPermaLink="false">http://yahnev.ru/?p=4402</guid>
		<description><![CDATA[Сайт Fallible помогает провести реверс-инжиринг Android приложения с целью получения секретов, прошитых в исходном коде. Компания периодически анализирует приложения заказчиков на безопасность и решила выложить сервис в откртый доступ. За пару месяц среди 16 тысяч приложений было найдено около двух с половиной тысяч приложений с ключами или секретами к внешним сервисам. Например, получив секретный код &#8230; <a href="http://yahnev.ru/?p=4402" class="more-link">Читать далее <span class="screen-reader-text">Что можно найти, если сделать реверс-инжиниринг 16 тысяч Android-приложений</span></a>]]></description>
				<content:encoded><![CDATA[<p>Сайт <a href="https://android.fallible.co/">Fallible </a>помогает провести реверс-инжиринг Android приложения с целью получения секретов, прошитых в исходном коде. Компания периодически анализирует приложения заказчиков на безопасность и решила выложить сервис в откртый доступ. За пару месяц среди 16 тысяч приложений было найдено около двух с половиной тысяч приложений с ключами или секретами к внешним сервисам.</p>
<p>Например, получив секретный код приложения Uber, можно было рассылать произвольные уведомления как будто из настоящего приложения Uber.</p>
<p><a href="http://yahnev.ru/wp-content/uploads/2017/02/UberNotify.png"><img class="alignnone size-full wp-image-4426" src="http://yahnev.ru/wp-content/uploads/2017/02/UberNotify.png" alt="" width="800" height="141" srcset="http://yahnev.ru/wp-content/uploads/2017/02/UberNotify.png 800w, http://yahnev.ru/wp-content/uploads/2017/02/UberNotify-300x53.png 300w, http://yahnev.ru/wp-content/uploads/2017/02/UberNotify-768x135.png 768w" sizes="(max-width: 800px) 100vw, 800px" /></a></p>
<p>Некоторые разработчики даже оставляют секретные коды к аккаунту Amazon Web Services c правами на запуск и остановку экземпляров виртуальных машин. Тут стоит упомянуть о существовании помощников, которые могут защитить от нечаянного коммита секретов в публичный репозиторий. Например, <a href="https://github.com/awslabs/git-secrets">https://github.com/awslabs/git-secrets</a>.</p>
<p>Простая обфускация через ProGuard лишь замедляет декомпиляцию и не остановит упорного злоумышленника от извлечения секретов. Рекомендуется по возможности не использовать коды доступа внутри приложения или использовать разные коды с разными уровнями доступа. <a href="https://rammic.github.io/2015/07/28/hiding-secrets-in-android-apps/">Здесь </a>можно почитать про способы защиты чувствительных данных в Android-приложениях.</p>
<p>via <a href="https://hackernoon.com/we-reverse-engineered-16k-apps-heres-what-we-found-51bdf3b456bb#.f8kg483sy">Hackernoon</a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://yahnev.ru/?feed=rss2&#038;p=4402</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Algorithm Visualizer &#8212; визуализатор алгоритмов</title>
		<link>http://yahnev.ru/?p=4233</link>
		<comments>http://yahnev.ru/?p=4233#respond</comments>
		<pubDate>Wed, 05 Oct 2016 18:07:40 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://yahnev.ru/?p=4233</guid>
		<description><![CDATA[Проект Algorithm Visualizer представляет собой коллекцию широко известных алгоритмов, работу которых можно наглядно проследить и детально в них разобраться. Код на JavaScript можно поправить на лету и посмотреть, к чему приведут изменения. К примеру, при поиске в графе обрабатываемые вершины будут подсвечиваться по мере поиска. Для сортировки переставляемые элементы выстроены в диаграмме, что очень облегчает &#8230; <a href="http://yahnev.ru/?p=4233" class="more-link">Читать далее <span class="screen-reader-text">Algorithm Visualizer &#8212; визуализатор алгоритмов</span></a>]]></description>
				<content:encoded><![CDATA[<p>Проект <a href="http://jasonpark.me/AlgorithmVisualizer">Algorithm Visualizer </a>представляет собой коллекцию широко известных алгоритмов, работу которых можно наглядно проследить и детально в них разобраться. Код на JavaScript можно поправить на лету и посмотреть, к чему приведут изменения.</p>
<p><a href="http://algo-visualizer.jasonpark.me/#path=graph_search/dls/tree"><img class="alignnone size-full wp-image-4367" src="http://yahnev.ru/wp-content/uploads/2016/10/GraphSearch.png" alt="GraphSearch" width="1314" height="715" srcset="http://yahnev.ru/wp-content/uploads/2016/10/GraphSearch.png 1314w, http://yahnev.ru/wp-content/uploads/2016/10/GraphSearch-300x163.png 300w, http://yahnev.ru/wp-content/uploads/2016/10/GraphSearch-768x418.png 768w, http://yahnev.ru/wp-content/uploads/2016/10/GraphSearch-1024x557.png 1024w" sizes="(max-width: 1314px) 100vw, 1314px" /></a>К примеру, при<a href="http://algo-visualizer.jasonpark.me/#path=graph_search/dls/tree"> поиске в графе </a>обрабатываемые вершины будут подсвечиваться по мере поиска. Для <a href="http://algo-visualizer.jasonpark.me/#path=sorting/heap/basic">сортировки </a>переставляемые элементы выстроены в диаграмме, что очень облегчает понимание непростых алгоритмов.</p>
<p><a href="http://algo-visualizer.jasonpark.me/#path=sorting/heap/basic"><img class="alignnone size-full wp-image-4369" src="http://yahnev.ru/wp-content/uploads/2016/10/Sort.png" alt="Sort" width="1355" height="929" srcset="http://yahnev.ru/wp-content/uploads/2016/10/Sort.png 1355w, http://yahnev.ru/wp-content/uploads/2016/10/Sort-300x206.png 300w, http://yahnev.ru/wp-content/uploads/2016/10/Sort-768x527.png 768w, http://yahnev.ru/wp-content/uploads/2016/10/Sort-1024x702.png 1024w" sizes="(max-width: 1355px) 100vw, 1355px" /></a></p>
<p>Проект будет интересен студентам и всем осваивающим программирование. Исходный код <a href="https://github.com/parkjs814/AlgorithmVisualizer">открыт </a>, так что любой может поучаствовать в совершенствовании примеров.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://yahnev.ru/?feed=rss2&#038;p=4233</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Почему протокол NTLM устарел</title>
		<link>http://yahnev.ru/?p=3806</link>
		<comments>http://yahnev.ru/?p=3806#respond</comments>
		<pubDate>Sun, 21 Aug 2016 18:20:00 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Безопасность]]></category>
		<category><![CDATA[Kerberos]]></category>
		<category><![CDATA[NTLM]]></category>

		<guid isPermaLink="false">http://yahnev.ru/?p=3806</guid>
		<description><![CDATA[Аутентификационный протокол NTLM является устаревшим, так как обладает недостатками, которые могут скомпрометировать безопасность приложений и операционной системы. Отсутствие серверной аутентификации &#8212; одна из главных проблем, позволяет хакеру обмануть пользователей и заставить их подключиться к взломанному серверу. Как следствие отсутствия серверной аутентификации, приложения, использующие NTLM могут быть уязвимы к атакам типа &#171;отражение&#171; Идея такой атаки состоит в &#8230; <a href="http://yahnev.ru/?p=3806" class="more-link">Читать далее <span class="screen-reader-text">Почему протокол NTLM устарел</span></a>]]></description>
				<content:encoded><![CDATA[<p>Аутентификационный протокол NTLM является устаревшим, так как обладает недостатками, которые могут скомпрометировать безопасность приложений и операционной системы. Отсутствие серверной аутентификации &#8212; одна из главных проблем, позволяет хакеру обмануть пользователей и заставить их подключиться к взломанному серверу.</p>
<p>Как следствие отсутствия серверной аутентификации, приложения, использующие NTLM могут быть уязвимы к атакам типа &#171;<strong><a href="https://en.wikipedia.org/wiki/Reflection_attack">отражение</a>&#171;</strong> Идея такой атаки состоит в том, чтобы запутать целевой компьютер в <i><span lang="en" xml:lang="en"><a href="https://en.wikipedia.org/wiki/Challenge%E2%80%93response_authentication">Challenge-response authentication</a> ) </span></i><span lang="en" xml:lang="en">и заставить его  правильно ответить на свой же запрос инициировав новое встречное подключение с теми же параметрами. Правильный ответ можно использовать для дальнейшего нормального процесса аутентификации.</span></p>
<p>Хотя протокол Kerberos доступен уже долгие  годы, множество приложений продолжают поддерживать только NTLM режим, что существенно ухудшает безопасность системы. Однако Kerberos не может заменить NTLM во всех сценариях, например, когда клиент аутентифицируется в системе, но не состоит в домене. В таком случае необходимо использовать протокол Negotiage, который использует Kerberos всегда, когда это только возможно и переключается на совместимость с NTLM только когда нет возможности работы по Kerberos.</p>
<p>Стоит помнить, что Negotiage не серебряная пуля &#8212; можно найти случаи, в которых атакующий может соединиться через NTLM, но такие случаи более редко и трудно эксплуатируемы. Как минимум, приложения, правильно переписанные на Negotiate перестают страдать от уязвимости к NTLM атакам типа &#171;отражение&#187;.</p>
<p>Еще одним предостережением против использования NTLM является возможность прекращения поддержки NTLM в новых версиях Windows, такие приложения просто не смогут аутентифицироваться.</p>
<p>&nbsp;</p>
<p><em>По материалам <a href="http://serverfault.com/questions/254813/why-use-kerberos-instead-of-ntlm-in-iis">ServerFault</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://yahnev.ru/?feed=rss2&#038;p=3806</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Необычный способ делать деньги</title>
		<link>http://yahnev.ru/?p=3838</link>
		<comments>http://yahnev.ru/?p=3838#comments</comments>
		<pubDate>Mon, 06 Jun 2016 18:12:30 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Факты]]></category>
		<category><![CDATA[DNS]]></category>
		<category><![CDATA[domains]]></category>

		<guid isPermaLink="false">http://yahnev.ru/?p=3838</guid>
		<description><![CDATA[Тувалу &#8212; крошечный полинезийский остров с населением всего лишь  10 тысяч человек. Основные доходу государству приносит рыболовств и доверительный фонда Тувалу, заработок на туризме ничтожен. После обретения независимости от Британии, остров сильно зависит от иностранной помощи. Звездный час страны настал с появлением и интернета и получением домена .tv. Правительство заключило договор с канадским бизнесменом Jason Chapnik &#8230; <a href="http://yahnev.ru/?p=3838" class="more-link">Читать далее <span class="screen-reader-text">Необычный способ делать деньги</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://yahnev.ru/wp-content/uploads/2016/06/tuvalu1.jpg"><img class="alignnone size-full wp-image-4242" src="http://yahnev.ru/wp-content/uploads/2016/06/tuvalu1.jpg" alt="tuvalu1" width="600" height="450" srcset="http://yahnev.ru/wp-content/uploads/2016/06/tuvalu1.jpg 600w, http://yahnev.ru/wp-content/uploads/2016/06/tuvalu1-300x225.jpg 300w" sizes="(max-width: 600px) 100vw, 600px" /></a></p>
<p><strong>Тувалу</strong> &#8212; крошечный полинезийский остров с населением всего лишь  10 тысяч человек. Основные доходу государству приносит рыболовств и доверительный фонда Тувалу, заработок на туризме ничтожен. После обретения независимости от Британии, остров сильно зависит от иностранной помощи.</p>
<p>Звездный час страны настал с появлением и интернета и получением домена .tv. Правительство заключило договор с канадским бизнесменом Jason Chapnik и получило 20% в компании DotTV. Первый платеж в 18 миллионов долларов удвоил ВВП страны. Verisign приобрел DoTV в 2002 году и продлил соглашение по управлению доменом <strong>.tv</strong> до 2021 года.</p>
<p>Такой дополнительный источник дохода позволил стране Тувалу стать финансово независимой и даже вступить в ООН. Членство в ООН стоит 20 тысяч долларов в год, что раньше было слишком большой суммой для небольшой страны. Вливания пошли на пользу инфраструктуре, развитию дорог, электрической сети и школ, Тувалу даже экспортирует еду!</p>
<p style="padding-left: 60px;"><em>Ссылки:</em><br />
<a href="https://en.wikipedia.org/wiki/Economy_of_Tuvalu">Economy of Tuvalu</a></p>
<p style="padding-left: 60px;"><a href="https://www.quora.com/What-are-some-unusual-ways-by-which-people-make-money">What are some unusual ways by which people make money</a></p>
]]></content:encoded>
			<wfw:commentRss>http://yahnev.ru/?feed=rss2&#038;p=3838</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Как добавить рабочий стол  с поддержкой RDP для Amazon EC2 Ubuntu</title>
		<link>http://yahnev.ru/?p=4108</link>
		<comments>http://yahnev.ru/?p=4108#respond</comments>
		<pubDate>Thu, 12 May 2016 17:24:01 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Без рубрики]]></category>

		<guid isPermaLink="false">http://yahnev.ru/?p=4108</guid>
		<description><![CDATA[Ниже предлагается один из самых быстрых способов поднять удаленный рабочий стол для северного дистрибутива Ubuntu &#8212; решение работает на Amazon Web Services. Достоинством RDP в отличие от VNC является возможность &#171;из коробки&#187; подключаться из Windows без установки дополнительных программ &#8212; достаточно выполнить команду mstsc для открытия терминала. Так же необходимо задать пароль, к примеру, для &#8230; <a href="http://yahnev.ru/?p=4108" class="more-link">Читать далее <span class="screen-reader-text">Как добавить рабочий стол  с поддержкой RDP для Amazon EC2 Ubuntu</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ниже предлагается один из самых быстрых способов поднять удаленный рабочий стол для северного дистрибутива Ubuntu &#8212; решение работает на Amazon Web Services. Достоинством RDP в отличие от VNC является возможность &#171;из коробки&#187; подключаться из Windows без установки дополнительных программ &#8212; достаточно выполнить команду mstsc для открытия терминала.</p>
<pre class="brush: plain; title: ; notranslate">
sudo apt-get update
sudo apt-get install lxde
sudo start lxdm
sudo apt-get install xrdp
</pre>
<p>Так же необходимо задать пароль, к примеру, для пользователя по умолчанию ubuntu:</p>
<pre class="brush: plain; title: ; notranslate">
sudo passwd ubuntu
</pre>
<p><a href="http://yahnev.ru/wp-content/uploads/2016/05/sesman.png"><img src="http://yahnev.ru/wp-content/uploads/2016/05/sesman.png" alt="" title="sesman" width="400" height="230" class="alignnone size-full wp-image-4190" /></a></p>
<p>Единственным недостатком решения является то, что повторное подключение приводит к запуску новой сессии. В качестве временного исправления можно использовать правку файла <strong>/etc/xrdp/xrdp.ini</strong> с заданием port=-1 в секции [xrdp1], но это работает только при подключении к уже запущенной последнее сессии, при перезагрузке компьютера почему-то необходимо вернуть значение порта по умолчанию.</p>
]]></content:encoded>
			<wfw:commentRss>http://yahnev.ru/?feed=rss2&#038;p=4108</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Профилирование производительности приложения без установки Visual Studio</title>
		<link>http://yahnev.ru/?p=3552</link>
		<comments>http://yahnev.ru/?p=3552#respond</comments>
		<pubDate>Wed, 27 Apr 2016 19:48:46 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[.Net Framework]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[анализ производительности]]></category>
		<category><![CDATA[профилирование]]></category>

		<guid isPermaLink="false">http://yahnev.ru/?p=3552</guid>
		<description><![CDATA[Думаю, многие программисты пользовались средствами анализа производительности, удобно интегрированных прямо в Visual Studio. Процесс настолько интуитивно понятен из графического интерфейса, что совсем не приходится задумываться, что в действительности, за сбор статистики работы приложения отвечает консольное приложение VsPerfCmd. Задумываться о том, что &#171;под капотом&#187; может понадобиться, если, к примеру, нужно собрать данные на компьютере без установленной &#8230; <a href="http://yahnev.ru/?p=3552" class="more-link">Читать далее <span class="screen-reader-text">Профилирование производительности приложения без установки Visual Studio</span></a>]]></description>
				<content:encoded><![CDATA[<p>Думаю, многие программисты пользовались средствами анализа производительности, удобно интегрированных прямо в Visual Studio. Процесс настолько интуитивно понятен из графического интерфейса, что совсем не приходится задумываться, что в действительности, за сбор статистики работы приложения отвечает консольное приложение <a href="https://msdn.microsoft.com/en-us/library/hh974575.aspx">VsPerfCmd</a>. Задумываться о том, что &#171;под капотом&#187; может понадобиться, если, к примеру, нужно собрать данные на компьютере без установленной Visual Studio. Сразу в голову приходит аналогия с удаленной отладкой, но в данном случае всё даже проще &#8212; специальный сервис просто собирает статистику в файл результатов, который потом можно открыть Visual Studio или добавить к существующим отчетам анализа производительности. Единственное требование &#8212; к исследуемым dll и exe файлам должны быть скопированы pdb-файлы, в противном случае проанализировать узкие места не удастся. Итак, первым делом, нужно установить сервис сбора статистики, инсталлятор находится в <strong>%VSInstallDir% Team ToolsPerformance ToolsSetups</strong>. Для VS 2012 &#8212; &#171;C:Program Files (x86)Microsoft Visual Studio 11.0Team ToolsPerformance ToolsSetupsvs_profiler_x64_enu.exe&#187;</p>
<p>Далее &#8212; запускаем сервис с нужным типом анализа и параметрами анализируемого приложения(путь и параметры командной строки). Ниже приведен скрипт на Powershell, который позволяет автоматизировать процесс присоединения к процессу и остановки сбора статистики при выходе из приложения. При подобной автоматизации процесс сбора и анализа производительности на удаленной машине не отличается от аналогичного процесса работы прямо из Visual Studio.</p>
<p><strong></p>
<pre><code>$tool = "C:Program Files (x86)Microsoft Visual Studio 11.0Team ToolsPerformance ToolsVSPerfCmd.exe"
$toolProcess = Start-Process $tool -ArgumentList "/Start:Sample /Output:c:perfstats2.vsp /Launch:""$analyzedProgramPath"" /Args:args "
$processName = [io.path]::GetFileNameWithoutExtension($analyzedProgramPath)
for ($i=0; $i -lt 1000; $i = $i+1) {
    $p = get-process ProcessName -ErrorAction SilentlyContinue<
    if (!$p) { break; }</p>
    sleep -s 1
}
Write-Host "Stopping collect..."
$tool /Shutdown /Analyze:Procid
</code></pre>
<p></strong></p>
<p>&nbsp;</p>
<p>Если нужно подключиться к ранее запущенному процессу, например, к сервису можно пользоваться опций <a href="https://msdn.microsoft.com/ru-ru/library/dd255393.aspx">Attach</a>.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://yahnev.ru/?feed=rss2&#038;p=3552</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LINT для английского языка</title>
		<link>http://yahnev.ru/?p=3526</link>
		<comments>http://yahnev.ru/?p=3526#respond</comments>
		<pubDate>Sat, 13 Feb 2016 16:39:06 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[TextMining]]></category>
		<category><![CDATA[Алгоритмы]]></category>
		<category><![CDATA[Без рубрики]]></category>

		<guid isPermaLink="false">http://yahnev.ru/?p=3526</guid>
		<description><![CDATA[Модуль  write-good  для NodeJS предназначен для проверки текстов на английском на &#171;академичность&#187; стиля. Автор поставил себе задачу автоматизацию трех проблем в научных текстах: 1. Чрезмерное использование Passive Voice. Помимо того, что большое количество пассивного залога ухудшает стиль текста, в научной статье это, как правило, связано с сокрытием существенной информации или неполноте фактов. Пример: Плохо:     &#8230; <a href="http://yahnev.ru/?p=3526" class="more-link">Читать далее <span class="screen-reader-text">LINT для английского языка</span></a>]]></description>
				<content:encoded><![CDATA[<p>Модуль  <a href="https://github.com/btford/write-good ">write-good</a>  для NodeJS предназначен для проверки текстов на английском на &#171;академичность&#187; стиля. Автор поставил себе задачу автоматизацию <a href="http://matt.might.net/articles/shell-scripts-for-passive-voice-weasel-words-duplicates/">трех проблем</a> в научных текстах:</p>
<p>1. Чрезмерное использование Passive Voice. Помимо того, что большое количество пассивного залога ухудшает стиль текста, в научной статье это, как правило, связано с сокрытием существенной информации или неполноте фактов. Пример:</p>
<p style="padding-left: 30px;">Плохо:   <em>     Termination is guaranteed on any input.</em><br />Лучше:       <em>Termination is guaranteed on any input by a finite state-space.</em><br />Хорошо:     <em>A finite state-space guarantees termination on any input.</em></p>
<p>2. Обтекамые выражения и лишние слова</p>
<p style="padding-left: 30px;">Плохо:    It is<strong> quite difficult</strong> to find untainted samples.<br />Лучше:    It is <strong>difficult</strong> to find untainted samples.</p>
<p>Часто студенты в работах используют &#171;ленивые&#187; слова, чтобы избежать необходимости количественного описания. Например, several, exceedingly, many, most, few, vast.</p>
<p style="padding-left: 30px;">Плохо:    There is <strong>very close</strong> match between the two semantics.<br />Лучше:    There is a <strong>close</strong> match between the two semantics.</p>
<p>3. Лексические иллюзии. Очень сложно заметить повторы слов, когда они разделены переносом строк.</p>
<p>Конечно, реализация очень несложная, но может быть интересна как раз свой простотой, чтобы понять, с чего легче начать разработку анализа текстов.</p>
<p>  Ссылки:</p>
<p><a href="https://github.com/devd/Academic-Writing-Check">https://github.com/devd/Academic-Writing-Check</a></p>
<p><a href="http://homepages.ed.ac.uk/martinc/msc/doc/hc.pdf">http://homepages.ed.ac.uk/martinc/msc/doc/hc.pdf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://yahnev.ru/?feed=rss2&#038;p=3526</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Марсоход Curiosity: C++ и особенности автономного передвижения</title>
		<link>http://yahnev.ru/?p=3684</link>
		<comments>http://yahnev.ru/?p=3684#respond</comments>
		<pubDate>Sun, 07 Feb 2016 11:30:35 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Cpp]]></category>

		<guid isPermaLink="false">http://yahnev.ru/?p=3684</guid>
		<description><![CDATA[Интереснейший доклад с CPP Con приоткрывает завесу над тем, как устроено управление марсоходом Curiosity. [youtube=http://www.youtube.com/watch?v=3SdSKZFoUa8&#38;feature=player_embedded] Одной из основных сложностей в управлении устройством, находящимся на Марсе, является существенное время прохождения сигнала. Лишь в одну сторону требуется 4 минуты 22 секунды. Задача становится еще более трудной, если узнать, что антенны Deep Space Network делятся между многими космическими &#8230; <a href="http://yahnev.ru/?p=3684" class="more-link">Читать далее <span class="screen-reader-text">Марсоход Curiosity: C++ и особенности автономного передвижения</span></a>]]></description>
				<content:encoded><![CDATA[<p>Интереснейший доклад с CPP Con приоткрывает завесу над тем, как устроено управление марсоходом Curiosity.</p>
<p>[youtube=http://www.youtube.com/watch?v=3SdSKZFoUa8&amp;feature=player_embedded]</p>
<p>Одной из основных сложностей в управлении устройством, находящимся на Марсе, является существенное время прохождения сигнала. Лишь в одну сторону требуется 4 минуты 22 секунды. Задача становится еще более трудной, если узнать, что антенны Deep Space Network делятся между многими космическими миссиями. Команда Curiosity может отправлять сигнал всего лишь <strong>один раз в сутки</strong>, а получать лишь несколько раз в день. Поэтому инженеры в течение дня готовят команды для управления ровером. Команды управления включают в себя управление движением, использование механической руки и проведение экспериментов.</p>
<p>После выполнения команд марсоход отправляет результаты работы и наблюдений на спутник на орбите Марса. Отправка сигнала сразу на Землю, потребовала бы гораздо больше энергии, чем на спутник, находящийся в 322 километрах  на орбите.</p>
<p>Разработка марсохода, способного практически самостоятельно перемещаться по поверхности, является сложной задачей, требующей работы тысяч людей.  Объем работы впечатляет еще больше, если узнать технические характеристики компьютера ровера:  частота процессора 133 МГц и 128 Мб оперативной памяти (адресуемой памяти лишь 32 Мб).</p>
<figure id="attachment_3912" style="width: 893px" class="wp-caption alignnone"><a href="http://yahnev.ru/wp-content/uploads/2016/02/Curiosity_hardware_features.png"><img class="size-full wp-image-3912" title="Curiosity_hardware_features" src="http://yahnev.ru/wp-content/uploads/2016/02/Curiosity_hardware_features.png" alt="" width="893" height="508" /></a><figcaption class="wp-caption-text">Характеристики Curiosity во втором столбце</figcaption></figure>
<p>Программный код содержит более 100 модулей, каждый из которых общается с другими через очередь сообщений с минимальным числом блокировок и разделяемой памяти. Модуль навигации – один из наиболее объемных и занимает 10% от всего объектного кода.</p>
<p>Большая часть кода для автономного передвижения написана на C++.  Исторически исследователи использовали C++ для разработки высокоуровневых автономных алгоритмов, таких как:  стерео-зрение, построение карт, планирование пути и визуальная одометрия. Однако до 2000 года C++ код никогда не летал на Марс, все модули разрабатывались на языке C.  При разработке марсоходов разработчики оценили, что риск ошибки при переписывании существующего протестированного кода с C++ на C выше, чем использование новой среды на C++.  С++ победил!</p>
<p><a href="http://yahnev.ru/wp-content/uploads/2016/02/curiosity_cameras.png"><img class="alignnone size-full wp-image-3916" title="curiosity_cameras" src="http://yahnev.ru/wp-content/uploads/2016/02/curiosity_cameras.png" alt="" width="1070" height="700" /></a></p>
<p>Марсоход Curiosity имеет множество стерео-камер, позволяющих надежно оценивать обстановку вокруг, даже если с частью камер возникнут проблемы.</p>
<p>Марсоход умеет передвигаться в нескольких режимах. Во-первых, конечно же, есть полностью ручной режим  прямого управления. Этот режим использовался во время первых движений по планете,  чтобы получить представление о безопасности окружающей территории.</p>
<p><span id="more-3684"></span>Режим визуальной одометрии – отслеживания пройденного расстояния по изменению положения объектов. Если колеса крутятся, а камни или дюны остались там же, то, скорее всего, ровер застрял.  Важной способностью программного обеспечения оценивать возможность продолжения автоматического движения без вмешательства человека.</p>
<figure id="attachment_3918" style="width: 1155px" class="wp-caption alignnone"><a href="http://yahnev.ru/wp-content/uploads/2016/02/curiosity_odometry.png"><img class="size-full wp-image-3918" title="С uriosityodometry" src="http://yahnev.ru/wp-content/uploads/2016/02/curiosity_odometry.png" alt="" width="1155" height="593" /></a><figcaption class="wp-caption-text">Марсоход сравнивает признаки, найденные на изображении для отслеживания изменений своего положения</figcaption></figure>
<p>При движении ровер постоянно оценивает опасности на его пути и выбирает оптимальный маршрут. Для этого ведется черно-белая фотосъемка с четырех стерео-камер. За счёт пары камер можно определить расстояние до объектов. Распознанные объекты наносятся на трехмерную карту, которая анализируется на предмет возможности её пересечь. Каждое препятствие проверяется на наличие выступов, уровень наклона, неровность. Непроходимые препятствия  считаются больше на размер ровера и помечаются на карте, чтобы центр марсохода был на безопасном расстоянии от препятствия. Ровер выбирает наиболее короткий безопасный маршрут к установленной цели. Марсоход останавливается каждые 0.5 – 1.5 метров и производит перерасчет маршрута. Стоит отметить, что максимальная скорость ровера всего лишь 5 сантиметров в секунду, в день марсоход проезжает не больше полутора сотен метров.</p>
<figure id="attachment_3932" style="width: 928px" class="wp-caption alignnone"><a href="http://yahnev.ru/wp-content/uploads/2016/02/curiosity_route.png"><img class="size-full wp-image-3932" title="curiosity_route" src="http://yahnev.ru/wp-content/uploads/2016/02/curiosity_route.png" alt="" width="928" height="703" /></a><figcaption class="wp-caption-text">Выбор оптимального безопасного маршрута</figcaption></figure>
<p>Для расчета оптимального пути по карте препятствий использовался новый алгоритм <a href="https://www.ri.cmu.edu/pub_files/pub4/ferguson_david_2005_3/ferguson_david_2005_3.pdf">Field D*</a>, эффективно работающий в случае небольших уточнений карты по мере перемещения камеры.</p>
<h1>Возражения против C++</h1>
<ul>
<li>Исключения: слишком много неопределенности, сложно контролировать все возможные пути выполнения.</li>
<li>Шаблоны: избыточный код, количество ресурсов компьютера ровера крайне ограничено.</li>
<li>Множественное наследование: недостаточный опыт использования в среде управления марсоходом</li>
<li>Перегрузка операторов: возможные ошибки разработчиков при изменениях кода другими людьми.</li>
<li>Динамическое выделение памяти: беспокойство об ограниченности памяти кучи, неопределенность времени при сборе мусора.</li>
</ul>
<p>Практически все указанные беспокойства разрешаются использованием встраиваемого C++ – нет исключений, шаблонов, множественного наследования. Можно лишь перегружать операторы new и delete. С помощью собственного менеджера памяти  операторы new и delete перегружены, чтобы никогда не использовать системное выделение памяти, память резервируется в заранее созданных при инициализации приложения пулах памяти.  Тщательные юнит-тесты проверяют код на отсутствие утечек памяти.</p>
<p>Программное обеспечение для планирования передвижений марсохода на Земле так же было написано на C++. Скачанные данные о движении автоматически дополнялись графической аннотацией и отправлялись на телефоны разработчиков команды.</p>
<figure id="attachment_3920" style="width: 1024px" class="wp-caption alignnone"><a href="http://yahnev.ru/wp-content/uploads/2016/02/curiosity_phone_data.png"><img class="size-full wp-image-3920" title="curiosity_phone_data" src="http://yahnev.ru/wp-content/uploads/2016/02/curiosity_phone_data.png" alt="" width="1024" height="655" /></a><figcaption class="wp-caption-text">Статус передвижения Curiosity на экране телефона инженера</figcaption></figure>
<p>Ссылки по теме:</p>
<ul>
<li>Презентация о марсоходах <a href="http://spacecraft.ssl.umd.edu/academics/788XF14/788XF14L07/788XF14L07.MER-MSL_x.pdf">MER/MSL</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://yahnev.ru/?feed=rss2&#038;p=3684</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как открыть Excel на втором мониторе</title>
		<link>http://yahnev.ru/?p=2598</link>
		<comments>http://yahnev.ru/?p=2598#respond</comments>
		<pubDate>Sat, 06 Feb 2016 10:13:10 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Без рубрики]]></category>

		<guid isPermaLink="false">http://yahnev.ru/?p=2598</guid>
		<description><![CDATA[Excel (в версии до 2013) обладает поведением, отличающимся от других офисных продуктов, таких как Microsoft Word. Если в Word можно легко открывать документы в разных окнах и соответственно, легко растаскивать их по мониторам, то в Excel по умолчанию все таблицы открываются в одном окне. Самым простым способом способом открыть таблицы Excel на разных экранах является &#8230; <a href="http://yahnev.ru/?p=2598" class="more-link">Читать далее <span class="screen-reader-text">Как открыть Excel на втором мониторе</span></a>]]></description>
				<content:encoded><![CDATA[<p>Excel (в версии до 2013) обладает поведением, отличающимся от других офисных продуктов, таких как Microsoft Word. Если в Word можно легко открывать документы в разных окнах и соответственно, легко растаскивать их по мониторам, то в Excel по умолчанию все таблицы открываются в одном окне.</p>
<p style="text-align: left;">Самым простым способом способом открыть таблицы Excel на разных экранах является открытие новой копии процесса Excel. Для этого нужно снова  запустить Excel из списка всех программ и уже из нового экземпляра приложения открывать второй файл. Тем не менее следует помнить, что в таком сценарии могут возникнуть различные ошибки связывания документов и копирования-вставки.</p>
]]></content:encoded>
			<wfw:commentRss>http://yahnev.ru/?feed=rss2&#038;p=2598</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cистема модулей C++  уже доступна в Visual Studio 2015</title>
		<link>http://yahnev.ru/?p=3833</link>
		<comments>http://yahnev.ru/?p=3833#respond</comments>
		<pubDate>Sun, 24 Jan 2016 16:48:20 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[Без рубрики]]></category>

		<guid isPermaLink="false">http://yahnev.ru/?p=3833</guid>
		<description><![CDATA[Первое обновление Update 1 к Visual Studio 2015 принесло новую экспериментальную возможность для C++. Долгожданная Система модулей C++, которая возможно войдет в стандарт C++ 17. Любой, кто разрабатывал большой проект на C++, знаком с проблемами, связанными с необходимостью связывать компоненты через заголовочные файлы. Дупликация между заголовочными файлами и исходным кодом, необходимость использовать идиому PIMPL, не &#8230; <a href="http://yahnev.ru/?p=3833" class="more-link">Читать далее <span class="screen-reader-text">Cистема модулей C++  уже доступна в Visual Studio 2015</span></a>]]></description>
				<content:encoded><![CDATA[<p>Первое обновление Update 1 к Visual Studio 2015 принесло<a href="http://blogs.msdn.com/b/vcblog/archive/2015/12/03/c-modules-in-vs-2015-update-1.aspx"> новую экспериментальную возможность</a> для C++. Долгожданная <a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4465.pdf">Система модулей C++</a>, которая возможно войдет в стандарт C++ 17.</p>
<p>Любой, кто разрабатывал большой проект на C++, знаком с проблемами, связанными с необходимостью связывать компоненты через заголовочные файлы. Дупликация между заголовочными файлами и исходным кодом, необходимость использовать идиому <a href="http://insidecpp.ru/patterns/pimpl_idiom/">PIMPL</a>, не говоря уже об огромных накладных расходах на вычитывание с диска бесконечных цепочек маленьких заголовочных файлов при компиляции</p>
<p>Итак, чтобы попробовать новые возможности, необходимо:</p>
<ul>
<li>Создать исходный файл модуля с расширением ixx (почему-то для cpp файлов это не работает) и использовать ключи компилятора <em>/experimental:module</em></li>
</ul>
<pre class="brush: cpp; title: ; notranslate">
// file: MyModule.ixx
module M;

export int f(int x)
{
    return 2 + x;
}
export double g(double y, int z)
{
    return y * z;
}
 </pre>
<ul>
<ul>
<li>В файле, куда подключается модуль использовать ключи компилятора <em>/experimental:module /module:reference ../Modules/M.ifc</em></li>
</ul>
</ul>
<pre class="brush: cpp; title: ; notranslate">
// file: main.cpp
#include &quot;stdafx.h&quot;
#include &lt;iostream&gt;

import M;

int main()
{
    std::cout&lt;&lt;f(5)&lt;&lt;std::endl;
    std::cout&lt;&lt;g(0.0, 1);
    return 0;
}
</pre>
<div><span style="font-size: 16px; line-height: 24px;"><em> </em></span></div>
<p>При компиляции модуля помимо обычного OBJ файла появляется файл IFC, содержащий метаданные об интерфейсе модуля. Представление этого файла основано на работе Gabriel Dos Reis and Bjarne Stroustrup под названием <a href="http://www.stroustrup.com/gdr-bs-macis09.pdf">&#171;Внутреннее представление программы&#187;</a>, реализацию можно найти на <a href="https://github.com/GabrielDosReis/ipr">GitHub</a>.</p>
<p>Следует отметить, что пока Visual Studio не предлагает встроенных средств для просмотра интерфейсов модулей, как это сделано, к примеру, для .NET сборок. Ожидаем, что полная поддержка модулей принесет с собой и удобные вспомогательные инструменты для работы с ними</p>
<p>Полный исходный код можно найти на <a href="https://bitbucket.org/Singlet/cppmodules">BitBucket</a></p>
]]></content:encoded>
			<wfw:commentRss>http://yahnev.ru/?feed=rss2&#038;p=3833</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
